【发布时间】:2025-12-22 23:50:12
【问题描述】:
我正在尝试在bash 和dash 中执行以下命令:
x="env PATH=\"$PATH:/dir with space\""
cmd="ls"
"$x" $cmd
这失败了
-bash: env PATH="/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/ X11/bin:/usr/local/git/bin:/usr/local/go/bin:/dir 带空格": 没有这样的文件或目录
注意以下工作:
env PATH="$PATH:/dir with space" $cmd
我分配给变量x env 的原因是因为它是$cmd 的更大命令包装器的一部分,这也是一个复杂的变量。
它比最初的例子更复杂。我有设置这些变量的逻辑,而不是每次都重复它们。最终调用如下所示:
path_value="$PATH"
invocation="env PATH=\"$path_value\" $other_val1 $other_val2"
base="python python_script.py --opt1=a,b,c script_args"
add_on="$base more_arg1 more_arg2"
"$invocation" $base
【问题讨论】:
-
你试过转义空格吗?
-
看一个更简单的例子:
x="echo hello"; "$x"- 这将返回echo hello: command not found- 尝试在 "$x" 周围不带引号的情况下运行它。 -
鉴于您在下面的评论中提到了一个子进程:您真的在使用 shell 代码构建命令行字符串吗?如果您在 Python 中构造字符串,则需要考虑不同的注意事项。
-
您可能根本不需要
env。例如,PATH="$PATH:/dir with space" python arg1 arg2使用修改后的PATH运行python。
标签: shell