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

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

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

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

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

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

ОБНОВЛЕНИЕ. Настоящий смысл моего вопроса заключался в следующем: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of- the-call-shell

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

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


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

  VARNAME = "my value"  

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

  export VARNAME = "my value" # более короткая, менее переносимая версия  

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

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

  sudo -H gedit/etc/environment  

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

  VARNAME = "my value"  

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

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


38

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

  $ export THEVAR =/example  

Переменная будет установлена ​​для оставшейся части s адский сеанс или до тех пор, пока не будет отключено.

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

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

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

Поделиться
Улучшить этот ответ
отредактировал 20 марта ’17 в 10:18
Сообщество ♦
1
ответил 27 августа 2011 в 07:20
  • 5
    Как я могу заставить его работать только путем выполнения скрипта? Без поиска. — Mithril 9 ноя., 2017 в 1:53
добавить комментарий |

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

  $ export THEVAR =/example  

Переменная будет установлена ​​до конца сеанса оболочки или до тех пор, пока не будет снята .

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

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

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


22

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

  1. Откройте терминал (нажав Ctrl Alt T )
  2. sudo -H gedit/etc/environment
  3. Введите пароль
  4. Отредактируйте только что открытый текстовый файл:
    например если вы хотите добавить FOO = bar , просто напишите FOO = bar в новой строке
  5. Сохраните
  6. После сохранения выйдите из системы и войдите снова.
  7. Необходимые изменения внесены.
Поделиться
Улучшить этот ответ
отредактировано 8 декабря 2014 г. в 13:38
muru
165k2929 золотых знаков386386 серебряных знаков618618 бронзовых знаков
ответил 7 дек. ’14 в 8:45
  • 6
    Я очистил ваш ответ, удалив наиболее опасные части о sudo gedit (см. askubuntu.com/questions/270006/…) и chmod 777 . Последнее никогда не должно выполняться в файле конфигурации системы. — muru 8 дек., 13:45
  • Это правильный ответ для определенных случаев. Все сеансы, независимо от того, сеансы пользовательской оболочки или нет, получат значение установленных переменных здесь. Важно отметить, что хотя это может выглядеть как сценарий оболочки, это не так — он позволяет вам только устанавливать переменные среды (вместо использования функций оболочки, таких как if или test ) — Том Харрисон-младший, 09 нояб., В 18:44
  • Если bar — это строка, следует ли помещать ее в кавычки? Нравится Foo = "bar" ? — blue_chip 10 ноя 2016, в 17:33
  • @blue_chip Нет, работает без кавычек. — Нажмите «Голосовать за» 10 января ’17 в 3:20
  • 4
    @blue_chip для переменных среды, все является строкой. Вам нужны только кавычки, если они содержат пробелы. — Руслан 03 фев. 2017, в 14:40
добавить комментарий |

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

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

12

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

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

Поделиться
Улучшите это ответ
ответ дан 16 мар ’18 в 18:09
  • Это это очень старый вопрос, на который уже есть принятый ответ и несколько других … Подумайте, отвечая на более свежие вопросы, пожалуйста … — NerdOfCode 16 марта 2018, 18:13
  • 4
    @NerdOfCode этот ответ решает проблему, которая все еще актуальна и ни одна из других в ответах, включая принятый, упоминается об этом, насколько я понимаю … На самом деле есть два значка для предоставления хороших ответов на старые вопросы, так что это приветствуется — Занна ♦ 27 мар 2018, 20:08
  • 1
    Это именно то, чем я был вот ждем. Мне нужно было увидеть из сценария экспортируемые переменные из сценария. — albanx 11 марта ’19 в 13:01
  • 2
    @NerdOfCode, как вы можете отговорить кого-то от предоставления дополнительной информации ? Этот ответ решил все мои проблемы! — Лука Фаджиоли 2 апр. ’20 в 07:59
добавить комментарий |

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

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


7

Я знаю, что уже довольно поздно, но если вы хотите добавить переменную среды для всех пользователей (например, использование JAVA) — вы можете сделать следующее:

1) Откройте /etc/bash.bashrc с помощью nano (вы можете использовать любой редактор , Я не предпочитаю VIM, так как это наихудшее удобство для пользователя — ничего личного).

2) Добавить в файл:

export VAR = path export PATH = $ PATH:/bin 3) (Лучше, если вы можете отскочить от окна) — или просто откройте новый сеанс SSH и подтвердите его с помощью команды env.

НО ЕСЛИ вы хотите, чтобы у каждого пользователя была отдельная настройка для этого, вы должны внести изменения (по сценарию) в файл .bashrc в ~/. bashrc (или /home/$ USER/, если вы новичок в системах Linux)

Поделиться
Улучшить этот ответ
ответил 18 августа ’19 в 13:09
  • Это помогло мне исправить мой ~/.bashrc . Как вы говорите, похоже, это должно быть PATH = $ PATH:/bin , у меня был $ PATH:/bin = PATH , который, казалось, работал, но придумал ошибки. — sdexp 30 дек. ’19 в 11:01
добавить комментарий |

Я знаю, что это довольно поздно, но если вы хотите добавить переменную среды для всех пользователей (например, использование JAVA) — вы можете сделать следующее:

1) Откройте /etc/bash.bashrc с помощью nano (вы можете использовать любой редактор, я не предпочитаю VIM, потому что это худший вариант для удобства пользователя — ничего личного).

2) Добавить в файл:

export VAR = path export PATH = $ PATH:/bin 3) (Лучше, если вы можете отскочить от коробки) — или просто откройте новый сеанс SSH и подтвердите его с помощью команды `env ‘.

НО ЕСЛИ вы хотите, чтобы у каждого пользователя был отдельный Для этого необходимо внести изменения (по сценарию) в файл .bashrc в ~/.bashrc (или /home/ $ USER/, если вы новичок в системах Linux)


6

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

  if [[!  -d "$ MyVar"]];  затем экспортировать MyVar = "abc" echo 'export MyVar = "abc"' >> ~/.bashrcfi  

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

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

Поделиться
Улучшить этот ответ
ответил 12 июля ’17 в 2: 06
добавить комментарий |

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

  если [[!  -d "$ MyVar"]];  затем экспортировать MyVar = "abc" echo 'export MyVar = "abc"' >> ~/. bashrcfi  

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

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

0

Если вы развертываете приложение JAVA с помощью TOMCAT, вы можете установить переменные среды следующим образом:

1. su и cd в/var/ lib/tomcat8/bin/(или в зависимости от того, какой у вас путь к bin-файлу tomcat)

  1. коснитесь setenv.sh (если он не существует), если файл присутствует уже делают ‘vi setenv.sh’

  2. chmod 777 setenv.sh (сделать файл исполняемым)

  3. vi setenv.sh и установите следующую строку в setenv.shexport key = value

  4. sudo systemctl restart tomcat.service

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

  private static void printEnv () {System.  out.println ("*****  ************************ Параметры среды ***********************  ****** ");  Карта  enviorntmentVars = System.getenv ();  enviorntmentVars.entrySet (). forEach (System.out :: println);  System.out.println ("****************************** системные переменные ***********  ****************** ");  Свойства enviorntmentProperties = System.getProperties ();  enviorntmentVars.entrySet (). forEach (System.out :: println);}  

Поделиться
Улучшить этот ответ
ответил 17 окт.2020 в 8:19
комментировать |

Если вы развертываете приложение JAVA с помощью TOMCAT, вы можете установить переменные среды следующим образом:

1. sudo su и cd в/var/lib/tomcat8/bin/(или в зависимости от того, какой у вас путь к bin-файлу tomcat)

  1. коснитесь setenv.sh (если это не так ‘не существует), если файл уже присутствует, выполните’ vi setenv.sh ‘

  2. chmod 777 setenv.sh (сделать файл исполняемым)

  3. vi setenv.sh и установите следующую строку в setenv.shexport key = value

  4. sudo systemctl restart tomcat. service

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

  private  static void printEnv () {System.out.println ("****************************** Переменные среды *****  ************************ ");  Карта  enviorntmentVars = System.getenv ();  enviorntmentVars.entrySet (). forEach (System.out :: println);  System.out.println ("****************************** системные переменные ***********  ****************** ");  Свойства enviorntmentProperties = System.getProperties ();  enviorntmentVars.entrySet (). forEach (System.out :: println);}  

Оцените статью
Botgadget.ru
Добавить комментарий