在Apache启动期间使用env vars中的空格
我想将一个带有空格的环境变量传递给apache。 Apache使用env来启动自己,所以实际上我必须让类似的东西工作起来在Apache启动期间使用env vars中的空格,apache,bash,shell,env,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 正如您所看
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实用程序已经将myfoo变量拆分为另外两个变量。
在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"
相反?为了澄清测试,case首先像export MYCMD=“env-i FOO=123\456”这样设置env var,然后运行$MYCMD。如果您有其他信息要包含,您可以编辑原始帖子。在“一切正常”的情况下,第三个数组元素是
“FOO=123 456”
。我认为执行时,execve
不会将123456
分配给FOO
。如果在shell提示符下键入FOO=123 456
,将得到bash:456:command not found…
。