Что делает команда "экспорт"?

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

Недавно я начал работать с дженкинсами, а затем мне пришлось использовать эту команду экспорта для запуска военного архива jenkins. Поэтому мне нужно было знать, что делает команда 'export', и почему нам нужно запускать эту команду во время запуска jenkins (после того, как дом jenkins установлен).

Спасибо!

Ответ 1

export в sh и связанных оболочках (например, bash), помещает переменную среды, которая будет экспортироваться в дочерние процессы, так что ребенок наследует их.

export определяется в POSIX:

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

Ответ 2

Я предполагаю, что вы исходите из окон. Поэтому я сравню их (я тоже новичок в Linux). Я нашел ответ пользователя на свой комментарий, чтобы быть полезным в том, чтобы разобраться.

В Windows переменная может быть постоянной или нет. Термин "переменная среды" включает переменную, установленную в командной строке cmd с командой SET, а также когда переменная задана в графическом интерфейсе Windows, поэтому устанавливается в реестре и становится видимой в новых окнах cmd. например документация для команды sed в окнах https://technet.microsoft.com/en-us/library/bb490998.aspx "Отображает, устанавливает или удаляет переменные среды. Используется без параметров, задает текущие настройки среды". В Linux набор не отображает переменные среды, он отображает переменные оболочки, которые он не вызывает/не ссылается как переменные среды. Кроме того, Linux не использует набор для установки переменных (помимо позиционных параметров и параметров оболочки, которые я объясняю в качестве примечания в конце), только для их отображения и даже тогда только для отображения переменных оболочки. Windows использует набор для настройки и отображения, например. set a = 5, linux - нет.

В Linux, я думаю, вы можете сделать script, который устанавливает переменные при загрузке, например. /etc/profile или /etc/.bashrc, но в остальном они не постоянны. Они хранятся в ОЗУ.

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

Вы можете просмотреть переменные оболочки с помощью команды set (хотя обратите внимание, что в отличие от окон переменные не установлены в Linux с помощью команды set).

set -o posix; set (сначала выполнить этот набор -o posix, помогает не отображать слишком много ненужных вещей). Поэтому set отображает переменные оболочки.

Вы можете просмотреть переменные среды с помощью команды env

переменные оболочки задаются, например, просто a=5

переменные окружения устанавливаются с экспортом, экспорт также устанавливает переменную оболочки

Здесь вы видите переменную оболочки zzz с zzz = 5, и ее просмотр отображается при запуске set, но не отображается как переменная среды.

Здесь мы видим yyy set with export, поэтому это переменная среды. И увидите, что это отображается как в переменных оболочки, так и в переменных среды

$ zzz=5

$ set | grep zzz
zzz=5

$ env | grep zzz

$ export yyy=5

$ set | grep yyy
yyy=5

$ env | grep yyy
yyy=5

$

другие полезные темы

https://unix.stackexchange.com/questions/176001/how-can-i-list-all-shell-variables

https://askubuntu.com/questions/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, - это опции/атрибуты оболочки. Если вы установили - вы видите список из них. И вы можете сделать, например, set -o verbose, off, чтобы включить подробный (btw по умолчанию отключается, но это не имеет никакого значения для этого). Или вы можете сделать set +o verbose, чтобы отключить подробный текст. У Windows нет такого использования для команды set.

Ответ 3

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