以这两种方式设置环境variables有什么区别?

对于我正在开发的一个项目,我们需要nginx和lua,我们就这样开始:

MYVAR1=some_value MYVAR2=some_value /usr/local/openresty/nginx/sbin/nginx -p `pwd`/ -c nginx.conf 

一切正常。 相反,如果我们这样做:

 export MYVAR1=some_value export MYVAR2=some_value /usr/local/openresty/nginx/sbin/nginx -p `pwd`/ -c nginx.conf 

然后,在工作进程内运行的lua脚本抱怨MYVAR1和MYVAR2没有设置。 这两者有什么区别,为什么在第二版中nginx + lua没有选中呢?

如果在bash下运行,应该没有区别, MYVAR1 /usr/local/openresty/nginx/sbin/nginx执行完毕后, MYVAR1MYVAR2将继续设置为相同的值。 你显示的第一个语法只会在nginx执行期间存在variables。

现在,如果您不使用bash (例如/bin/sh或其他POSIX兼容shell),则可能需要使用其他语法,在export它们之前设置环境variables:

 MYVAR1=some_value export MYVAR1 MYVAR2=some_value export MYVAR2 

我不知道你是从shellterminal还是通过shell脚本来做这件事,但是你可以通过下面的方法来判断:

 ps -ef | grep $$ | grep -v grep 

如果是/bin/sh或其他shell,这是你的问题。 如果你是在shell脚本里面做的话,你可以改变文件的顶部( #!/... )到#!/bin/bash而不是#!/bin/sh ,或者使用sh符合语法。