0

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

提前谢谢了。

4

2 回答 2

0

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

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

我怀疑这对你来说有点太简单了,因为“导出”一个数组并没有真正起作用。我认为bash让“导出”的数组对子shell可见,但严格来说,环境变量只是一个没有任何其他类型结构的命名字符串。

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

于 2013-08-29T13:07:26.917 回答
0

问题似乎是第二级引用(示例中的反斜杠)没有由 shell 评估。

有没有机会你可以调用你的命令,比如

eval "$MYCMD"

反而?

于 2013-08-29T13:52:19.753 回答