在Apache启动期间使用env-var中的空格



我想将一个带有空格的环境变量传递给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[@]}"

我怀疑这对您来说有点太简单了,因为"导出"数组实际上并不起作用。我认为bash在使"导出"数组对子shell可见方面做了一些巧妙的操作,但严格来说,环境变量只是一个命名字符串,没有任何其他类型的结构。

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

问题似乎是第二级引用(eample中的反斜杠)不是由shell计算的。

你有没有机会像一样调用你的命令

eval "$MYCMD"

相反?

相关内容

  • 没有找到相关文章

最新更新