在Apache启动期间在env变量中使用空格

时间:2013-08-29 07:52:29

标签: apache bash shell env

我想将一个带有空格的环境变量传递给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启动代码所做的事情,我有点不得不找到这个难题的解决方案。

非常感谢提前。

2 个答案:

答案 0 :(得分:0)

我可能误解了你想要的东西,但你可以尝试使用数组而不是简单的变量。

export MYCMD=( env -i "FOO=123 456" )
"${MYCMD[@]}"

我怀疑这对你来说有点过于简单,因为“导出”数组并不真正有用。我认为bash做了一些小手术,使“导出”数组对子壳可见,但严格来说环境变量只是一个没有任何其他类型结构的命名字符串。

究竟如何使用MYCMD?你把它放在哪个文件中?对环境的更改仍然存在,因此如果要在启动Apache的命令环境中设置FOO="123 456",Apache也会继承FOO

答案 1 :(得分:0)

问题似乎是第二级引用(你的例子中的反斜杠)不是由shell评估的。

你是否有可能像

那样调用你的命令
eval "$MYCMD"

代替?