Linux export from file

Export variables defined in another file

I have a script that contains a couple of variables that need to be set as an environment variable The list of variables change constantly and modifying it on my end is not an option. Any idea how I would go about doing it? sample file foo.sh

3 Answers 3

There is a difference between a variable and an environment variable. If you execute . foo.sh and foo.sh contains the line FOO=value , then the variable FOO will be assigned in the current process. It is not an environment variable. To become an environment variable (and thus be available to sub-shells), it must be exported. However, shells provide an option which makes all variable assignments promote the variable to an environment variable, so if you simply do:

then all variable assignments in foo.sh will be made environment variables in the current process. Note that this is not strictly true: in bash, exporting a variable makes it an environement variable in the current shell, but in other shells (dash, for example) exporting the variable does not make it an environment variable in the current shell. (It does cause it to be set it in the environment of subshells, however.) However, in the context of the shell, it does not really matter if a variable is an environment variable in the current process. If it is exported (and therefore set in the environment of any sub-processes), a variable that is not in the environment is functionally equivalent to an environment variable.

Источник

Определение переменной в 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 от переменных в других языках программирования заключаются в следующем:

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

Однако между глобальными переменными в 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 и других связанных команд предоставляют различные способы определения, экспорта и использования переменных в разных оболочках и сценариях.

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

Источник

Exporting Bash Variables

What happens if we export a shell variable in bash?

export makes the variable available to sub-processes. means that the variable name is available to any process you run from that shell process. . You would use this for (say) loop variables, temporary variables etc. It’s important to note that exporting a variable doesn’t make it available to parent processes.

How do I export a variable in Linux?

  1. Open the current user’s profile into a text editor. vi ~/.bash_profile.
  2. Add the export command for every environment variable you want to persist. export JAVA_HOME=/opt/openjdk11.
  3. Save your changes.

How do I export an environment variable from a file?

  1. grab the content of the file.
  2. remove any blank lines (just incase you separated some stuff)
  3. remove any comments (just incase you added some. )
  4. add export to all the lines.
  5. eval the whole thing.

How do I export variables in react?

In React we use the keyword export to export a particular module or a named parameter or a combination. Let us now see the different ways we can use the import operation in React. Exporting default export: We have already learned that every module is said to have at most one default export.

What is export in bash script?

The export command is one of the bash shell BUILTINS commands, which means it is part of your shell. . In general, the export command marks an environment variable to be exported with any newly forked child processes and thus it allows a child process to inherit all marked variables.

Where are export variables stored?

It’s stored in the process (shell) and since you’ve exported it, any processes that process spawns. Doing the above doesn’t store it anywhere in the filesystem like /etc/profile.

What does export do in terminal?

export makes a variable something that will be included in child process environments. It does not affect other already existing environments. In general there isn’t a way to set a variable in one terminal and have it automatically appear in another terminal, the environment is established for each process on its own.

How do I export an array in bash?

  1. Save each element in a different variable (e.g. MY_ARRAY_0=myArray[0]). Gets complicated because of the dynamic variable names.
  2. Save the array in the file system (declare -p myArray >file).
  3. Serialize all array elements into a single string.

How do I export a variable in UNIX?

Export is defined in POSIX as The shell shall give the export attribute to the variables corresponding to the specified names, which shall cause them to be in the environment of subsequently executed commands. If the name of a variable is followed by = word, then the value of that variable shall be set to the word.

How do I find export variables in Linux?

  1. printenv command – Print all or part of environment.
  2. env command – Display all exported environment or run a program in a modified environment.
  3. set command – List the name and value of each shell variable.

What is PATH variable in Linux?

PATH is an environmental variable in Linux and other Unix-like operating systems that tells the shell which directories to search for executable files (i.e., ready-to-run programs) in response to commands issued by a user.

Exporting Bash Variables

Export

How do I export a variable in bash?What happens if we export a shell variable in bash?How do I export a variable in Linux?How do I export an environme.

Session Hijacking Attacks

Session

What is session hijacking attack?What causes session hijacking?How does session hijacking works?Is session hijacking legal?What are the types of sessi.

How to Install Deb Files (Packages) on Ubuntu

Install

Install/Uninstall . deb filesTo install a . deb file, simply Right click on the . deb file, and choose Kubuntu Package Menu->Install Package.Altern.

Latest news, practical advice, detailed reviews and guides. We have everything about the Linux operating system

Источник

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