【发布时间】:2013-08-29 07:52:29
【问题描述】:
我想将一个带有空格的环境变量传递给 apache。 Apache 使用 env 来启动自己,所以实际上我必须做一些类似这样的工作
export MYCMD=" env -i FOO=123\ 456"
$MYCMD
结果是
env: 456: No such file or directory
查看 strace 输出我看到了这个
execve("/usr/bin/env", ["env", "-i", "FOO=123\\", "456"], [/* 41 vars */]) = 0
正如您所见,env 实用程序已将我的 FOO 变量拆分为其他两个变量,因为空间原因。 在 env 消化命令后,我尝试了各种方式来尝试维护空间,但到目前为止还没有运气。
你可以自己试试这个
env -i FOO=123\ 456
FOO=123 456
一切都好
execve("/usr/bin/env", ["env", "-i", "FOO=123 456"],
将命令放入另一个环境变量时会出现问题
由于这就是 Apache 启动代码的作用,我有点难以找到解决这个难题的方法。
提前非常感谢。
【问题讨论】:
-
为了澄清测试,案例首先像这样设置环境变量 export MYCMD=" env -i FOO=123\ 456" 然后运行 $MYCMD
-
如果您有其他信息要包含,您可以编辑您的原始帖子。
-
在“一切正常”的情况下,第三个数组元素是
"FOO=123 456"。我认为execve在执行时不会将123 456分配给FOO。如果你在 shell 提示符下输入FOO=123 456,你会得到bash: 456: command not found...。