我尝试用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`
任何人都可以指出我的错误来帮助我吗?我正在尝试编写一个衬垫并在以后对其进行别名。
注意:脚本甚至不能用于查找结果,只有一个结果,结果没有空格。
我正在使用kashsole和bash版本4.2.45(2)。
答案 0 :(得分:4)
您必须在当前shell中运行cd
。正如您所见,在另一个shell中运行它将无效。创建一个功能。例如:
mycd (){
cd "${1}foo"
}
答案 1 :(得分:2)
前3个实现存在一些问题:
-exec
选项需要可执行二进制文件。 cd是内置的shell,而不是二进制文件,比如/ bin / bash xargs
也采用可执行二进制文件。subshell
执行。因此,它创建了一个子进程(bash),找到了目录,cd到该目录,&退出。您当前的shell不受影响。有两个选项可以cd到找到的目录:
1.使用subshell更改目录:
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
而不是cd
,您可以选择使用pushd
。就个人而言,我不喜欢cd修改我的CWD& OLDCWD,没有简单的方法来恢复它们。