对于我正在从事的一个项目,我们需要 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
,则应该没有区别,除了一旦 执行完毕,MYVAR1
和MYVAR2
将继续设置为相同的值/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 的语法。