2016-11-01 2 views
0

С одной переменной окружения это выглядит:Как запустить команду в Баш с несколькими переменными окружения набор

bash$> foo=1 echo "$foo" 
1 

[EDIT: как отмечено ниже, даже это не будет работать, но работал только потому, что $ Foo было ранее заданный каким-либо другим испытанием. Должно было дать «unset foo» между испытаниями.]

Но что, если нужно установить несколько переменных среды в той же командной строке, где запущена команда? Как они не работают:

bash$> foo=1 bar=2 echo "$foo $bar" 
1 

bash$> foo=1 && bar=2 echo "$foo $bar" 
1 

bash$> (foo=1;foo=2) && echo "$foo $bar" 
1 

bash$> (foo=1 && foo=2) && echo "$foo $bar" 
1 

Возможно ли это? (С помощью сценария, очевидно)

+1

На самом деле, даже ваш первый пример ('Foo = 1 эхо«$ Foo»') не работает, вы, вероятно, просто установили 'foo' из предыдущего запуска. – IMSoP

+0

Ах, вы правы. Я должен был использовать «unset foo» между испытаниями. – zimon

ответ

1

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

$ foo=1 bar=2 bash -c 'echo $foo - $bar ' 
1 - 2 

$ echo $foo 
<no output> 

$ echo $bar 
<no output> 

Обратите внимание, что область действия переменных окружения ограничивается только оболочкой bash. Как показали следующие две команды, эти env vars не попадают в текущую оболочку.

Если вы не обеспокоены окр VARS заканчиваясь в текущей оболочке, то просто следующий будет достаточно:

$ foo=1; bar=2; echo "$foo $bar" 
1 2 

$ echo $foo - $bar 
1 - 2 
+0

Вам действительно не нужно env здесь; ключ (как указано в вопросе, который я предложил в качестве обмана) заключается в том, что '$ foo' находится в одинарных кавычках и позже оценивается' bash -c'. Итак, 'foo = 1 bar = 2 bash -c 'echo $ foo - $ bar'' работает отлично, а также 'foo = 1 bar = 2 some_other_command'. – IMSoP

+0

@IMSoP, это правда. Благодарю. Обновленный ответ. –

-1
$ foo=5;bar=6; echo "$foo $bar" 
5 6 
+2

Это «постоянно» устанавливает 'foo' и' bar', т. Е. Они останутся 5 и 6 для остальной части сеанса, а прежние значения будут потеряны. Это отличается от настройки их контекстно для конкретной команды. – IMSoP

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

  • Нет связанных вопросов^_^