Я немного новичок в Linux, и мне довелось запускать некоторые команды вслепую, чтобы добиться желаемого. Я подумал, что задавать подобные вопросы не будет напрасной тратой, поскольку новые люди будут регулярно знать о них.
Недавно я начал работать с Дженкинсом , а затем мне пришлось использовать эту export
команду для запуска военного архива Дженкинса . Поэтому мне нужно было знать, что export
вообще делает команда и почему нам нужно запускать эту команду при запуске Jenkins (после того, как установлен дом Jenkins).
Благодарность!
shell
unix
command
environment-variables
Чатура Куласингхе
источник
источник
Ответы:
export
insh
и связанных оболочках (например,bash
), отмечает переменную среды, которая будет экспортирована в дочерние процессы, чтобы потомок их унаследовал.export
определено в POSIX :источник
Я предполагаю, что вы исходите из фона Windows. Я сравню их (я тоже новичок в Linux). Я обнаружил, что ответ пользователя на мой комментарий был полезен при выяснении ситуации.
В Windows переменная может быть постоянной или нет. Термин «Переменная среды» включает в себя переменную, установленную в оболочке cmd с помощью команды SET, а также когда переменная устанавливается в графическом интерфейсе Windows, таким образом устанавливается в реестре и становится доступной для просмотра в новых окнах cmd. например, документация для команды set в Windows https://technet.microsoft.com/en-us/library/bb490998.aspx «Отображает, устанавливает или удаляет переменные среды. При использовании без параметров set отображает текущие настройки среды». В Linux set не отображает переменные среды, он отображает переменные оболочки, которые он не вызывает / не называет переменными среды. Кроме того, Linux не использует набор для установки переменных (кроме позиционных параметров и опций оболочки, которые я объясняю в виде примечания в конце), только для их отображения и даже тогда только для отображения переменных оболочки. Windows использует set для настройки и отображения, например, set a = 5, linux - нет.
В Linux, я думаю, вы могли бы создать сценарий, который устанавливает переменные при загрузке, например,
/etc/profile
или, в/etc/.bashrc
противном случае, они не постоянные. Они хранятся в оперативной памяти.В Linux существует различие между переменными оболочки и переменными среды. В Linux переменные оболочки находятся только в текущей оболочке, а переменные среды находятся в этой оболочке и во всех дочерних оболочках.
Вы можете просматривать переменные оболочки с помощью
set
команды (хотя обратите внимание, что в отличие от Windows, переменные не устанавливаются в Linux с помощью команды set).set -o posix; set
(выполнение этого set -o posix один раз помогает не отображать слишком много ненужного). Такset
отображаются переменные оболочки.Вы можете просмотреть переменные среды с помощью
env
командыпеременные оболочки устанавливаются, например, просто
a = 5
переменные среды устанавливаются с помощью экспорта, экспорт также устанавливает переменную оболочки
Здесь вы видите переменную оболочки zzz, установленную с zzz = 5, и видите, что она отображается при запуске,
set
но не отображается как переменная среды.Здесь мы видим yyy, установленный с экспортом, так что это переменная среды. И посмотрите, как это отображается как в переменных оболочки, так и в переменных среды
$ zzz=5 $ set | grep zzz zzz=5 $ env | grep zzz $ export yyy=5 $ set | grep yyy yyy=5 $ env | grep yyy yyy=5 $
другие полезные темы
/unix/176001/how-can-i-list-all-shell-variables
/ubuntu/26318/environment-variable-vs-shell-variable-whats-the-difference
Обратите внимание: один момент, который немного уточняет и несколько корректирует то, что я написал, заключается в том, что в linux bash 'set' можно использовать для установки «позиционных параметров» и «параметров / атрибутов оболочки», и технически обоих из это переменные, хотя страницы руководства могут не описывать их как таковые. Но все же, как уже упоминалось, set не устанавливает переменные оболочки или переменные среды). Если вы это сделаете,
set asdf
он установит $ 1 в asdf, а если вы это сделаете,echo $1
вы увидите asdf. Если вы это сделаетеset a=5
он не установит переменную a равной 5. Он установит позиционный параметр $ 1 равным строке «a = 5». Так что, если вы когда-либо видели установку a = 5 в Linux, это, вероятно, ошибка, если только кто-то действительно не хотел, чтобы строка a = 5 в $ 1. Другая вещь, которую может установить набор linux, - это параметры / атрибуты оболочки. Если вы установите -o, вы увидите их список. И вы можете, напримерset -o verbose
, выключить, чтобы включить подробный отчет (кстати, по умолчанию он выключен, но это не имеет значения). Или вы можете сделать,set +o verbose
чтобы отключить подробные сведения. Windows не имеет такого использования для своей команды set.источник
Проще говоря, переменные среды устанавливаются при открытии нового сеанса оболочки. В любое время, если вы измените любое из значений переменных, оболочка не сможет выбрать это изменение. это означает, что внесенные вами изменения вступают в силу в новых сеансах оболочки. Команда
export
, с другой стороны, предоставляет возможность обновить текущий сеанс оболочки об изменении, которое вы внесли в экспортируемую переменную. Вам не нужно ждать нового сеанса оболочки, чтобы использовать значение измененной вами переменной.источник
a=5
тогдаecho $a
будет сказано 5. Тем не менее, вы написали: «В любой момент, если вы измените какое-либо значение переменной, оболочка не сможет выбрать это изменение. Это означает, что внесенные вами изменения вступят в силу в новых сеансах оболочки». . <- Так как же он обновил сессию оболочки без экспорта. Можете привести пример, где нужен экспорт?