Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Apache启动期间使用env vars中的空格_Apache_Bash_Shell_Env - Fatal编程技术网

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

在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 正如您所看

我想将一个带有空格的环境变量传递给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实用程序已经将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…