Назад | Перейти на главную страницу

В чем разница между установкой переменных среды этими двумя способами?

Для проекта, над которым я работаю, нам нужны 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 и MYVAR2 будет по-прежнему иметь то же значение один раз /usr/local/openresty/nginx/sbin/nginx завершено выполнение. В первом синтаксисе, который вы показали, переменные будут существовать только в течение времени жизни nginxисполнение.

Теперь, если вы не используете bash, (например, /bin/shили другая оболочка, совместимая с POSIX) вам может потребоваться альтернативный синтаксис, задав переменные среды перед exportих:

MYVAR1=some_value
export MYVAR1

MYVAR2=some_value
export MYVAR2

Я не уверен, что вы делаете это через терминал оболочки или через сценарий оболочки, но вы можете определить это с помощью:

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

Если это /bin/sh, или какая-то другая оболочка, это ваша проблема. Если вы делаете это внутри сценария оболочки, вы можете изменить строку shebang (#!/... вверху файла), чтобы #!/bin/bash вместо того #!/bin/shили используйте sh-совместимый синтаксис.