繁体   English   中英

Bash函数中的Cd

[英]Cd inside a Bash FUNCTION

我关于SO的第一个问题,如果不做正确的事情就道歉!

互联网上有很多关于在脚本中使用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

您不应该在find命令中引用该目录,以后在使用该变量时应该引用它。 所以改变find命令

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM