我的.zshrc
.它创建一个命令来搜索并运行可执行文件,该文件可能存在于当前目录或当前路径上某处的父目录中,也可能不存在。我有逻辑来查找可执行文件(如果存在),但是当我尝试运行它时,出现以下错误:
使用 /Users/用户名/some/directory/executable_file
function_name:15: 没有这样的文件或目录: /Users/username/some/directory/executable_file
由以下代码生成:
if [[ $current_path != / ]]
then
echo "Using $current_path/executable_file"
"$current_path/executable_file $@"
然而,该路径是正确的,因为复制粘贴它或使用 sudo 运行该函数可以完美地工作。我尝试sudo -u
在脚本中以当前用户身份运行该函数,但仍然失败。
如何运行可执行脚本,就像用户手动输入它一样,或者至少没有 sudo 和密码?
答案1
围绕这一行的引用:
"$current_path/executable_file $@"
告诉 shell 有一项需要找到并执行——双引号之间的任何内容(在各种变量扩展之后)。
在最简单的情况下,如果函数没有参数,它将尝试执行:
"$current_path/executable_file "
...即使$current_path/executable_file
文件本身存在,这也可能会失败,因为有一个尾随空格。
如果您确实传递了参数,则存在此类文件的可能性甚至更低,即:
"$current_path/executable_file arg1 arg2 arg3..."
重新排列引号,以便保护$current_path
变量的扩展,但允许可执行文件的名称在应该结束时结束:
"$current_path/executable_file" "$@"