这两种方式设置环境变量有什么区别?

这两种方式设置环境变量有什么区别?

对于我正在从事的一个项目,我们需要 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 在第 2 版中没有选择它们?

答案1

如果在 下运行bash,则应该没有区别,除了一旦 执行完毕,MYVAR1MYVAR2将继续设置为相同的值/usr/local/openresty/nginx/sbin/nginx。您展示的第一个语法只会让 变量在 的nginx执行生命周期内存在。

现在,如果你不使用bash, (例如 ,或另一个符合 POSIX 标准的 shell ),你可能需要一种替代语法,在输入它们/bin/sh之前设置环境变量:export

MYVAR1=some_value
export MYVAR1

MYVAR2=some_value
export MYVAR2

我不确定您是从 shell 终端还是通过 shell 脚本执行此操作,但您可以通过以下方式确定:

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

如果是/bin/sh,或者其他 shell,那么这就是您的问题。如果您在 shell 脚本中执行此操作,则可以将 shebang 行(#!/...位于文件顶部)更改为,#!/bin/bash而不是#!/bin/sh,或者使用符合 sh 的语法。

相关内容