J. *_*zyk 3 linux bash shell cd function
我关于SO的第一个问题,如果不做正确的事情就道歉!
关于在脚本中使用cd,互联网上有很多问题,但我的问题是在我放入的bash函数中使用cd .bashrc
.它的任务是找到一个文件并转到该文件的工作目录.如果找到多个文件,我只是转到第一个.这里是:
fcd() {
cd $PWD
if [ -z "$1" ]; then
echo 'Specify a file name to find'
else
found_dir=$( find . -name $1 -type f -printf \"%h/\" -quit )
echo $found_dir
if [ -z "$found_dir" ]; then
echo "No file found. Directory was not changed"
else
cd $found_dir
fi
fi
}
Run Code Online (Sandbox Code Playgroud)
但是,当我使用它时,找到目录,但尝试cd $found_dir
导致消息:
cd: (directory_here): No such file or directory
Run Code Online (Sandbox Code Playgroud)
我已经排除了路径错误的可能性 - 通过复制输出echo $found_dir
并将其粘贴cd
到目录前面会成功更改.有任何想法吗?
谢谢,
的Jakub
您不应该在find命令中引用该目录,以后在使用该变量时应该引用它.所以改变find命令
find . -name $1 -type f -printf \"%h/\" -quit
Run Code Online (Sandbox Code Playgroud)
至
find . -name "$1" -type f -printf %h -quit
Run Code Online (Sandbox Code Playgroud)
第一个命令返回由引号括起的目录路径,如"/path/to/dir"
.因此,当您尝试访问cd
该目录时,cd
会认为引号是路径的一部分.
然后调整cd
to cd "$found_dir"
以确保cd
在$found_dir
包含特殊字符(如空格或a)时不会失败*
.
另请注意,cd $PWD
由于我们已经在该目录中,因此是多余的.实际上,它甚至可能导致问题,因为您没有引用变量.