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

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

[email protected]:~$ 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 запускает программу в измененной среде, а затем отклоняет все изменения.

205 голосов | спросил huff 27 AM00000040000005431 2011, 04:22:54

5 ответов


337

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

VARNAME="my value"

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

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

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

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

sudo -H gedit /etc/environment

Этот файл принимает только присваивания переменных, например:

VARNAME="my value"

Не используйте здесь export.

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

ответил Michał Šrajer 27 AM000000110000001531 2011, 11:50:15
21

Чтобы установить переменную среды один раз, используйте команду 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-баш-скрипт /176788 # 176788

ответил lesmana 27 AM000000110000002231 2011, 11:20:22
15

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

  1. Откройте терминал (нажав Ctrl Alt T )
  2. sudo -H gedit /etc/environment
  3. Введите свой пароль
  4. Отредактируйте только что открытый текстовый файл:
    например если вы хотите добавить FOO=bar, тогда просто напишите FOO=bar в новой строке
  5. Сохранить
  6. После сохранения, выхода и входа снова.
  7. Ваши требуемые изменения сделаны.
ответил user355501 7 SunEurope/Moscow2014-12-07T11:45:23+03:00Europe/Moscow12bEurope/MoscowSun, 07 Dec 2014 11:45:23 +0300 2014, 11:45:23
3

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

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

ответил m0bl 16 MarpmFri, 16 Mar 2018 18:09:45 +03002018-03-16T18:09:45+03:0006 2018, 18:09:45
1

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

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

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

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc
ответил ShitalShah 12 J000000Wednesday17 2017, 05:06:06

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132