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


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

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

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

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

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

ОБНОВИТЬ: Реальный смысл моего вопроса заключался в следующем: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell

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

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


211
2017-08-27 00:22


Источник


Когда он определен / экспортируется в .bashrc, он работает правильно. - huff
возможный дубликат Переменная среды Google Планета Земля и $ BROWSER - Isaiah
Как насчет THEVAR=/example? - Oleh Prypin
Другая - о глобальных переменных, это не добавляет такого ограничения. Я бы сохранил это отдельно. - Lekensteyn
help.ubuntu.com/community/EnvironmentVariables - huff


Ответы:


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

VARNAME="my value"

Чтобы установить его для текущей оболочки и все процессы началось с текущей оболочки:

export VARNAME="my value"      # shorter, less portable version

Чтобы установить его постоянно для всех будущих сессий bash добавьте такую ​​строку в свою .bashrc файл в вашем $HOME каталог.

Чтобы установить его навсегда и в широком масштабе (все пользователи, все процессы) добавляют переменную set в / etc / environment:

sudo -H gedit /etc/environment

Этот файл принимает только переменные назначения, такие как:

VARNAME="my value"

Не используйте export ключевое слово здесь.

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


342
2017-08-27 07:50



Shell config files such as ~/.bashrc, ~/.bash_profile, and ~/.bash_login are often suggested for setting environment variables. While this may work on Bash shells for programs started from the shell, variables set in those files are not available by default to programs started from the graphical environment in a desktop session.  help.ubuntu.com/community/EnvironmentVariables - SudoSURoot
Где я должен добавить свою конкретную строку ?! внизу страницы .bashrc ?! - Mr.Hyde
@ Mr.Hyde да, это, вероятно, разумное место - Michał Šrajer
Почему второй менее портативный? - UniversallyUniqueID
@BharadwajRaju, потому что на некоторых старых UNIX-системах можно экспортировать только переменную, которая уже установлена. Например, старые Solaris и HP-UX. - Michał Šrajer


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

$ export THEVAR=/example

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

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

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

Для объяснения различия между поиском и выполнением см. Этот ответ: https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-script/176788#176788


21
2017-08-27 07:20



Как я могу заставить его работать только при выполнении сценария? Без источников. - Mithril


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

  1. Откройте терминал (нажав CtrlAltT)
  2. sudo -H gedit /etc/environment
  3. Введите пароль
  4. Отредактируйте только что открытый текстовый файл:
    например если вы хотите добавить FOO=bar, то просто напишите FOO=bar в новой строке
  5. Сохрани это
  6. После сохранения, выхода из системы и входа снова.
  7. Внесены необходимые изменения.

15
2017-12-07 08:45



Я очистил ваш ответ, удалив более опасные sudo gedit (Видеть askubuntu.com/questions/270006/...) а также chmod 777, Последнее никогда не должно выполняться в файле конфигурации системы. - muru
Это правильный ответ для определенных случаев. Все сеансы, будь то сеансы пользовательской оболочки или нет, получат значение переменных, установленных здесь. Важно отметить, что хотя это может выглядеть как сценарий оболочки, это не так: он позволяет вам устанавливать только переменные среды (или использовать функции оболочки, такие как if или test) - Tom Harrison Jr
Если строка является строкой, следует ли ее помещать между кавычками? подобно Foo="bar"? - blue_chip
@blue_chip Нет, работает без кавычек. - Click Upvote
@blue_chip для переменных среды, все это строка. Вам нужны только кавычки, когда они содержат пробелы. - Ruslan


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

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


3
2018-03-16 15:09



Это очень старый вопрос, который уже имеет принятый ответ и несколько других ... Подумайте, отвечая на более поздние вопросы, пожалуйста ... - NerdOfCode
@NerdOfCode этот ответ решает проблему, которая по-прежнему актуальны и ни один из других ответов, в том числе и принятый, не упоминает об этом, насколько я могу судить ... На самом деле есть два значка для предоставления хороших ответов на старые вопросы, поэтому это рекомендуется - Zanna


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

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

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

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc

1
2017-07-12 02:06