我想将一个带有空格的环境变量传递给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启动代码所做的事情,我有点不得不找到这个难题的解决方案。
非常感谢提前。
答案 0 :(得分:0)
我可能误解了你想要的东西,但你可以尝试使用数组而不是简单的变量。
export MYCMD=( env -i "FOO=123 456" )
"${MYCMD[@]}"
我怀疑这对你来说有点过于简单,因为“导出”数组并不真正有用。我认为bash
做了一些小手术,使“导出”数组对子壳可见,但严格来说环境变量只是一个没有任何其他类型结构的命名字符串。
究竟如何使用MYCMD
?你把它放在哪个文件中?对环境的更改仍然存在,因此如果要在启动Apache的命令环境中设置FOO="123 456"
,Apache也会继承FOO
。
答案 1 :(得分:0)
问题似乎是第二级引用(你的例子中的反斜杠)不是由shell评估的。
你是否有可能像
那样调用你的命令eval "$MYCMD"
代替?