2016-09-29 34 views
3

我的第一个问题就是SO,所以如果没有正确地做某件事,道歉!在一个Bash里面的Cd功能

在互联网上有很多关于在脚本中使用cd的问题,但我的问题是在我使用内置于我的.bashrc的bash函数中的cd。它的任务是找到一个文件并转到该文件的工作目录。在找到多个文件的情况下,我只是转到第一个文件。那就是:

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 
} 

然而,当我使用它,在目录中找到,而是试图cd $found_dir结果的消息中:

cd: (directory_here): No such file or directory 

我排除的路径是错误的可能性 - 通过复制echo $found_dir的输出并将其粘贴到cd前,目录被成功更改。有任何想法吗?

感谢,

的Jakub

回答

6

你不应该引用在find命令的目录,你应该以后引用它,当你使用变量。所以从

find . -name $1 -type f -printf \"%h/\" -quit 

改变find命令

find . -name "$1" -type f -printf %h -quit 

第一个命令返回用引号引起来的目录路径,如"/path/to/dir"。因此,当您尝试cd到该目录时,cd会认为引号是路径的一部分。

然后调整cdcd "$found_dir"以确保如果$found_dir包含特殊字符,如空格或*cd不会失败。

另请注意,cd $PWD是多余的,因为我们已经在该目录中。事实上,它可能会导致问题,因为你没有引用变量。

+0

哦,是的,CD $ PWD是我愚蠢的调试尝试。你的解决方案工作,你们是最好的! –