2016-12-16 2 views
2

Я только что пришел через этот фрагмент кода:Попутные переменные среды в процесс

$ DEVELOPMENT=1 node dev-mode.js 

Эта линия проходит Node.js программы и устанавливает переменные окружения DEVELOPMENT. Я не понимаю, какой механизм используется для установки переменной env? Является ли это действительный синтаксис:

$ [var1=value1 var2=value2] [process_name process_params] ? 
+0

Вы хотите знать, как установить переменные среды? – Inian

+0

Мне нужны подробности об этом конкретном способе настройки переменных окружения –

+0

@Maximus: Дайте мне знать, если мой ответ ниже - это то, что вы намеревались знать. – Inian

ответ

2

Есть два способа установить переменный пасс из текущей оболочки запущенной программы

Либо использовать export встроенные с синтаксисом, как

$ export MYVALUE=5 
$ echo "MYVALUE is $MYVALUE" 
MYVALUE is 5 
в

Этот синтаксис позволяет переменной вступать в силу в текущей оболочке во всех последующих под-оболочках, которые вы вызываете (для подстановки команд или подстановки подстановки и т. Д.), И переменная остается в живых даже после завершения суб-оболочек.

(или) как просили в вопросе, если вы напрямую отправить его в команду, как

$ MYVALUE=5 bash -c 'echo "MYVALUE is $MYVALUE"' 
MYVALUE is 5 

значение передается только к югу от оболочки (один начал с bash -c) и не имеет никакого эффекта на родительскую оболочку после ее завершения. Теперь вы можете увидеть MYVALUE из приведенного выше синтаксиса, он будет пустым.

$ echo $MYVALUE 
$ 

Надеюсь, этот вопрос ответит на ваш вопрос.

+0

Первый пример кода вводит в заблуждение, поскольку строка «MYVALUE is $ MYVALUE» 'интерпретируется родительской оболочкой, где' $ MYVALUE' будет расширяться даже без 'export'. – PSkocik

1

Этот пример должен продемонстрировать:

X=0; Y=1;  #set X and Y 
#set X, Y for the child and have it expand and print those vars 
X=42 Y=43 sh -c 'echo $X $Y' 
#print the same vars in the parent 
echo $X $Y  

Синтаксис

var0=val0 var1=val1... command 

делает его действовать, как если список переменного, предшествующий команду временно назначены соответствующие значения и переменные были экспортированы , как с

export var0 

После c ommand выполняется, переменные в списке переменных имеют свои исходные значения и статус экспорта (= автоматически ли они распространяются на дочерние процессы).

Пример печатает

42 43 
0 1 
+0

спасибо, мое понимание правильно, что '$ X = 0; Y = 1; 'без предшествующего' export' не будет доступно внутри '$ sh -c 'echo $ X $ Y''? –

+0

Исправить. В bash вы можете сделать 'declare -p variable_name', чтобы показать флаги экспорта и другие свойства переменной. Вы можете использовать его для изучения поведения этих механизмов. Что касается экспорта, то тире и другая оболочка ведут себя одинаково, AFAIK, но я не уверен, что это поведение, если POSIX предусмотрена. – PSkocik

+0

получил, спасибо большое за ответ –

1

Да, это действительный синтаксис, это описано в Simple Commands разделе man bash:

Простая команда представляет собой последовательность дополнительных назначений переменных с последующим пробелом - отделил слов и переадресаций, и завершил оператор управления. Первое слово указывает команду, которая должна быть выполнена, и передается как аргумент нуль. Остальные слова передаются в качестве аргументов вызываемой команды.

Смежные вопросы