Linux export несколько переменных

How to export variables that are set, all at once?

set command displays all the local variables like below. How do I export these variables all at once?

>set a=123 b="asd asd" c="hello world" 

what do you mean export all at once? you can use semi colons to define in one line. like a=123;b=»asd asd»;c=»hello world»

Your question is unclear. Is that an excerpt of set output you’re showing? If so, then it’s not bash ‘s. Do you want to export all the currently set variable including the special shell variables? Or only those 3 variables like in export a b c ?

export $ would export any defined parameter whose name starts with T . Unfortunately, there doesn’t seem to be a way to easily generate a list of all defined parameters.

5 Answers 5

Run the following command, before setting the variables:

set -a set -o allexport # self-documenting version 

To turn this option off, run set +a or set +o allexport afterwards.

set -a # or: set -o allexport . ./environment set +a 

Where environment contains:

FOO=BAR BAS='quote when using spaces, (, >, $, ; etc' 

This must be enabled before assigning to variables, though. It doesn’t do anything to previously assigned variables.

Same preliminary requirement as chosen answer . either explicitly export each variable as per

or prior to any variable assignment issue

set -a # for details see answer by @nitin 

then this works if your shell is bash ( possibly other shells as well )

your new file will contain a dump of all currently defined variables . with entries like

declare -x PORT="9000" declare -x PORT_ADMIN="3001" declare -x PORT_DOCKER_REGISTRY="5000" declare -x PORT_ENDUSER="3000" declare -x PRE_BUILD_DIR="/cryptdata6/var/log/tmp/khufu01/loud_deploy/curr/loud-build/hygge" declare -x PROJECT_ID="hygge" declare -x PROJECT_ID_BUSHIDO="bushido" 

then to jack up current shell with all those env vars issue

Источник

Определение переменной в Bash: с командой export и без

Определение переменной в Bash: с командой export и без главное изображение

Bash-переменные Linux предполагают два способа определения переменной оболочки — с командой export и без нее. Это важный момент — добавление этой команды меняет область действия переменной. В этой статье разберем различия между определением переменной оболочки с export и без, а также рассмотрим варианты использования export и его параметры.

Это адаптированный перевод статьи Defining a Bash Variable With or Without ‘export’ из блога образовательного проекта Baeldung.

С одной стороны, Bash — самый популярный командный интерпретатор в юниксоподобных системах, особенно в GNU/Linux. С другой — скриптовый язык программирования со своим синтаксисом и особенностями.

Определение переменной с export и без

Переменные Bash похожи на переменные в Java или C++, но с одним существенным отличием: они не нуждаются в объявлении. Переменную создает присвоение ее имени значения. Например, так:

$ MYVAR=1729 $ export MYVAR=1729 

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

Читайте также: Как сохранять фокус на протяжении всего обучения: советы от Хекслета

Основное различие между этими двумя способами определения переменной заключается в том, что export делает переменную доступной для всех следующих команд, которые выполняются в этой оболочке. Команда export помечает MYVAR для автоматического экспорта в среду дочерних процессов, которые создаются такими командами:

$ export MYVAR=1729 $ echo $MYVAR 1729 $ bash # Open a new child shell $ echo $MYVAR 1729 

Если переменная задана без использования export, то она будет доступна только внутри оболочки. Другими словами, дочерние оболочки, процесс или команды вне ее не получат доступа к ней:

$ MYVAR=1729 $ echo $MYVAR 1729 $ bash # Open a new child shell $ echo $MYVAR $ 

Отличия переменных в Bash от переменных в других языках программирования заключаются в следующем:

  • Переменные оболочки (определенные без экспорта) подобны локальным переменным. Доступ к ним можно получить только внутри этой оболочки.
  • Переменные окружения (определенные с помощью экспорта) подобны глобальным переменным. Доступ к ним могут получить как в родительской оболочке, так и во всех дочерних оболочках, процессах и командах.
Читайте также:  Astra linux dicom viewer

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

Когда стоит использовать export, а когда нет

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

  • При настройке среды дочернего процесса или оболочки
  • При определении переменной, которую будет использовать сценарий bash, выполняемый из родительской оболочки
  • При настройке переменных окружения для терминальных мультиплексоров (например, screen или tmux)
  • При настройке среды сборки для сценариев и инструментов сборки

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

Как использовать export

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

Экспорт функции

export может экспортировать не только переменные, но и функции. Для этого нужно использовать опцию командной строки export -f . Стоит отметить, что функции будут доступны и в дочерних оболочках и процессах:

$ func() > echo hi > > $ func hi $ bash # Open a new child shell $ func bash: func: command not found $ exit # Back to parent shell $ export -f func $ bash # Open a new child shell $ func hi 

Удаление переменной

Переменные окружения автоматически экспортируются во все дочерние оболочки, а также в их дочерние оболочки. Для удаления автоматически унаследованной переменной существует команда export -n :

$ echo $USER ubuntu $ bash # Open a new child shell $ echo $USER ubuntu $ exit # Back to parent shell $ export -n USER $ bash # Open a new child shell again $ echo $USER $ 

Список всех экспортированных переменных

Для получения списка всех переменных и функций, экспортированных в текущую оболочку, используется команда export -p :

$ export -p declare -x COLORTERM="truecolor" declare -x DESKTOP_SESSION="ubuntu" declare -x DISPLAY=":0" declare -x GDMSESSION="ubuntu" declare -x LESSCHARSET="latin1" declare -x LESSCLOSE="/usr/bin/lesspipe %s %s" declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s 2>&-" . . declare -x XDG_SESSION_DESKTOP="ubuntu" declare -x XDG_SESSION_ID="2" declare -x XDG_SESSION_TYPE="x11" declare -x XDG_VTNR="1" 

Эта команда помогает проверить, что все переменные оболочки экспортированы правильно.

Автоматический экспорт всех переменных

Для автоматического экспорта всех переменных, определенных в текущей оболочке, существует опция all export . Ее можно включать или отключать, используя команду set :

$ set -a # Enable allexport using single letter syntax $ set -o allexport # Enable using full option name syntax 
$ set +a # Disable allexport using single letter syntax $ set +o allexport # Disable using full option name syntax 
$ set -a $ MYVAR=1729 # no export $ bash # Open a new child shell $ echo $MYVAR 1729 

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

Как связаны родительская и дочерние оболочки

У передачи переменной окружения между родительской и дочерними оболочками существует определенная иерархия:

Сценарии и export

При создании сценария, вызываемого из командной оболочки и содержащего команду export , нужно проверить соответствие результата экспорта ожидаемому. Для этого есть несколько способов.

Export во время выполнения скрипта

Выполнение сценария с командой export из командной оболочки происходит в дочерней оболочке. Это означает, что любые переменные, экспортируемые сценарием, будут доступны только его дочерним оболочкам, но не родительской. Когда выполнение сценария завершится, экспортированные переменные исчезнут из среды:

$ echo "export MYVAR=1729" > myscript.sh $ chmod +x myscript.sh $ ./myscript.sh $ echo $MYVAR $ 

Экспорт переменной в родительскую оболочку

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

$ echo "MYVAR=1729" > myscript.sh $ source myscript.sh $ echo $MYVAR 1729 

Заключение

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

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

Источник

Linux export несколько переменных

Команда export является встроенной командной командной оболочки bash, позволяющей устанавливать значения переменных окружения. Для ознакомления с полным списком переменных окружения и их значений может использоваться команда env.

Базовый синтаксис команды выглядит следующим образом:

$ export [параметры] ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ

В том случае, если нужно объявить переменную без установки ее значения, в качестве аргумента может использоваться лишь имя переменной. Команда принимает несколько параметров, которые используются крайне редко. В частности, параметр -p позволяет вывести список всех переменных окружения. Параметр -n позволяет убрать из списка переменных окружения переменную с заданным именем. Наконец, параметр -f позволяет экспортировать функции командной оболочки по аналогии с переменными.

На первый взгляд может показаться, что команда export является бесполезной, так как вы можете объявлять переменные без нее:

$ export a=b
$ echo $a
b
$ x=y
$ echo $x
y

Так какая разница между следующими объявлениями:

$ export first=»hello»
$ first=»hello»

Ну, разница заключается в том, что команда export устанавливает значение переменной окружения, доступной для всех программ, запускаемых с помощью данной командной оболочки. Например, вы можете создать файл test.sh сценария командной оболочки со следующим содержимым:

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

$ chmod +x test.sh
$ first=hello
$ export second=world
$ ./test.sh

В результате будет выведено лишь значение второй переменной, а именно:

Очевидно, что значение первой переменной не доступно сценарию test.sh, в отличие от значения второй переменной, объявленной с помощью команды export.

Примеры использования

Добавление директории в список директорий переменной PATH

Для того, чтобы система искала исполняемые файлы в нестандартной директории достаточно добавить путь к этой директории в список директорий, являющийся значением переменной $PATH. Для этой цели может использоваться команда export. Например, для добавления в список директорий путь к текущей директории достаточно выполнить следующую команду:

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

Экспорт функции

Для того, чтобы экспортировать функцию из одного сценария в другой следует использовать команду export с параметром -f. Это код первого сценария script.sh, из которого экспортируется функция say_hello(), после чего вызывается второй сценарий script2.sh:

export -f say_hello
./script2

А это — код второго сценария script2.sh, в котором не делается ничего кроме вызова этой экспортированной функции:

Теперь при исполнении первого сценария script1.sh будет исполняться второй сценарий script2.sh, вызывающий экспортированную функцию say_hello(). Несложно убедиться в том, что механизм экспорта функций отлично работает:

Источник

Оцените статью
Adblock
detector