我试着用Bash,写一个单行
find ~ -name Music -type d -exec cd '{}' ;
这一个使用find和exec,但我得到了错误:
find:"cd":没有这样的文件或目录
第二次尝试XARGS、
find ~ -name Music -type d -print0 | xargs -0 cd
现在我再次尝试写一个脚本。sh
pathe=$(find ~ -name $1 -type d | head -n 1 )
cd $pathe
并尝试执行脚本./1.sh Music
,但没有成功。
到目前为止,唯一有效的方法是直接在终端中键入以下命令
cd `find ~ -iname books -type d | head -n 1`
有人能帮我指出错误吗?我正试着写一行字,稍后再取别名。
注意:该脚本甚至不适用于只有一个结果的find result和没有空格的result。
我将konsole与bash版本4.2.45(2)一起使用。
您必须在当前shell中运行cd
正如您所看到的,在另一个shell中运行它是行不通的。创建一个函数。示例:
mycd (){
cd "${1}foo"
}
前3个实现存在一些问题:
-exec
选项需要一个可执行的二进制文件。cd是一个shell内置文件,而不是二进制文件,如/bin/bashxargs
也采用可执行二进制文件- 代码正确。但是,由于您创建了一个.sh文件,&在
subshell
中执行。因此,它创建了一个子进程(bash),找到了目录,cd到那个目录,&已退出。您当前的外壳不受影响
有两个选项可以cd到找到的目录:
1.使用子shell更改目录:
find ~ -name Music -type d -exec bash -c "cd '{}'; exec bash" ;
这启动了一个bash shell,&在该shell中,它将更改为所需的目录
注意,您所做的任何更改都不会反映在父shell中。
2.使用bash函数:
findAndCd(){
pathe=$(find ~ -name $1 -type d | head -n 1 )
cd $pathe
}
Usage:
findAndCd Music
您可以选择使用pushd
而不是cd
。就我个人而言,除了cd修改我的CWD&OLDCWD,而没有一种简单的方法来恢复这两者。