Как добавить переменные среды?

Я запускаю Ubuntu 11.04. Я использую терминал для запуска сеанса bash, и я хочу добавить переменную среды:

$r@hajt:~$ env THEVAR=/example

Но это не работает. Он показывает, что все переменные с THEVAR являются последними, но другой вызов env больше не показывает THEVAR - env | grep THEVAR ничего не возвращает.

Аналогично, скрипты с экспортом (export THEVAR=/example) или другие назначения переменных (THEVAR=/example) не добавляют переменную среды.

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

UPDATE: реальный смысл моего вопроса был следующим: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling -shell

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

env запускает программу в модифицированном среда, затем отклоняет все изменения.

1
задан 23 May 2017 в 15:39

4 ответа

Чтобы установить переменную среды один раз, используйте команду export в приглашении, а не в сценарии оболочки:

$ export THEVAR=/example

Переменная будет установлена ​​для остальной части сеанса оболочки или до unset.

Чтобы каждый раз задавать переменную окружения, используйте команду export в файле .bashrc (или соответствующий файл инициализации для вашей оболочки).

Чтобы установить среду переменную из скрипта, используйте команду export в скрипте, а затем source сценарий. Если вы выполните скрипт, это не сработает.

Для объяснения разницы между поиском и выполнением см. Этот ответ: https://superuser.com/questions/176783/what-is-the-difference -between-выполнение-а-баш-скрипт-и-Sourcing-а-баш-скрипт / 176788 # 176788

20
ответ дан 25 May 2018 в 19:08
  • 1
    Как я могу заставить его работать только при выполнении сценария? Без источников. – Mithril 9 November 2017 в 05:53

Чтобы постоянно добавлять новую переменную среды в Ubuntu (проверяется только в 14.04), выполните следующие действия:

Откройте терминал (нажав CtrlAltT) sudo -H gedit /etc/environment Введите свой пароль Редактируйте текстовый файл просто открыт: например если вы хотите добавить FOO=bar, то просто напишите FOO=bar в новой строке. Сохраните его. После сохранения, выхода и входа снова. Внесены необходимые изменения.
15
ответ дан 25 May 2018 в 19:08
  • 1
    Я очистил ваш ответ, удалив более опасные биты о sudo gedit (см. askubuntu.com/questions/270006/… ) и chmod 777. Последнее никогда не должно выполняться в файле конфигурации системы. – muru 8 December 2014 в 17:45
  • 2
    Это правильный ответ для определенных случаев. Все сеансы, будь то сеансы пользовательской оболочки или нет, получат значение переменных, установленных здесь. Важно отметить, что хотя это может выглядеть как сценарий оболочки, это не так: он позволяет вам устанавливать только переменные среды (например, с помощью функций оболочки, таких как if или test), – Tom Harrison Jr 9 November 2016 в 22:44
  • 3
    Если строка является строкой, следует ли ее помещать между кавычками? Как Foo="bar"? – blue_chip 10 November 2016 в 21:33
  • 4
    @blue_chip Нет, работает без кавычек. – Click Upvote 10 January 2017 в 07:20
  • 5
    @blue_chip для переменных среды, все это строка. Вам нужны только кавычки, когда они содержат пробелы. – Ruslan 3 February 2017 в 18:40

Чтобы изменения среды / var сохранялись после завершения скрипта, вы должны использовать source ./script.sh или сокращенную нотацию для источника «.», например . ./script.sh

Источник будет выполняться команды в скрипте, как если бы вы их набрали ... поэтому он меняет некоторые аспекты скрипта, такие как выход ... поэтому, если ваш скрипт что-то проверяет и решает выйти, если false, например, посредством вызова [ f3], он прекратит ваш текущий сеанс терминала / оболочки.

2
ответ дан 25 May 2018 в 19:08
  • 1
    Это очень старый вопрос, который уже имеет принятый ответ и несколько других ... Подумайте, отвечая на более поздние вопросы, пожалуйста ... – NerdOfCode 16 March 2018 в 22:13
  • 2
    @NerdOfCode этот ответ адресует проблему, которая по-прежнему актуальна , и ни один из других ответов, включая принятый, не упоминает об этом, насколько я могу судить ... Фактически два значка доступны для обеспечивая хорошие ответы на старые вопросы, поэтому это рекомендуется – Zanna 27 March 2018 в 23:08

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

if [[ ! -d "$MyVar" ]]; then 
    export MyVar="abc"
    echo 'export MyVar="abc"' >> ~/.bashrc
fi

. Если вам нужно оценивать выражения типа pwd, вы можете использовать это , например,

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc
1
ответ дан 25 May 2018 в 19:08

Другие вопросы по тегам:

Похожие вопросы: