cd inside a Bash FUNCTION
Cd inside a Bash FUNCTION
我关于 SO 的第一个问题,如果做错了什么,我们深表歉意!
互联网上有很多关于在脚本中使用 cd 的问题,但我的问题是在我放入 .bashrc
的 bash 函数中使用 cd。它的任务是找到一个文件并转到该文件的工作目录。如果找到多个文件,我只转到第一个文件。这是:
fcd() {
cd $PWD
if [ -z "" ]; then
echo 'Specify a file name to find'
else
found_dir=$( find . -name -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
前面,目录已成功更改。有什么想法吗?
谢谢,
雅库布
你不应该在 find 命令中引用目录,你应该在以后使用变量时引用它。所以将查找命令从
find . -name -type f -printf \"%h/\" -quit
至
find . -name "" -type f -printf %h -quit
第一个命令returns目录路径用引号括起来,如"/path/to/dir"
。因此,当您尝试 cd
到该目录时,cd
会认为引号是路径的一部分。
然后将cd
调整为cd "$found_dir"
以确保cd
不会在$found_dir
包含特殊字符如space或[=]时失败19=].
另请注意,cd $PWD
是多余的,因为我们已经在该目录中。实际上,它甚至可能会导致问题,因为您没有引用变量。
我关于 SO 的第一个问题,如果做错了什么,我们深表歉意!
互联网上有很多关于在脚本中使用 cd 的问题,但我的问题是在我放入 .bashrc
的 bash 函数中使用 cd。它的任务是找到一个文件并转到该文件的工作目录。如果找到多个文件,我只转到第一个文件。这是:
fcd() {
cd $PWD
if [ -z "" ]; then
echo 'Specify a file name to find'
else
found_dir=$( find . -name -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
前面,目录已成功更改。有什么想法吗?
谢谢,
雅库布
你不应该在 find 命令中引用目录,你应该在以后使用变量时引用它。所以将查找命令从
find . -name -type f -printf \"%h/\" -quit
至
find . -name "" -type f -printf %h -quit
第一个命令returns目录路径用引号括起来,如"/path/to/dir"
。因此,当您尝试 cd
到该目录时,cd
会认为引号是路径的一部分。
然后将cd
调整为cd "$found_dir"
以确保cd
不会在$found_dir
包含特殊字符如space或[=]时失败19=].
另请注意,cd $PWD
是多余的,因为我们已经在该目录中。实际上,它甚至可能会导致问题,因为您没有引用变量。