Глобальные переменные среды в сценарии оболочки

Как установить глобальную переменную среды в сценарии bash?

Если я делаю такие вещи, как

#!/bin/bash
FOO=bar

#! / bin / bash export FOO = bar ..или

.

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

shell,scripting,environment-variables,

77

Ответов: 5


125 ов принято

Запустите свой скрипт .

. myscript.sh

Это запустит скрипт в текущей среде оболочки.

export какие переменные будут доступны для новых процессов, поэтому, если вы скажете

FOO=1
export BAR=2
./runScript.sh

то $BARон будет доступен в среде runScript.sh, но $FOOне будет.


47

Когда вы запускаете скрипт оболочки, он выполняется в под-оболочке, поэтому он не может влиять на среду родительской оболочки. Вы хотите . ./ setfoo . sh сценарий, делая:

source myscript.sh

Это выполняется в контексте текущей оболочки, а не как подклассу .

На странице справки bash:

, filename [arguments]
source filename [arguments]

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

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

Поиск файла в PATH не обязательно должен выполняться. Когда bash не находится в режиме POSIX, выполняется поиск текущего каталога, если в PATH не найден файл.

Если параметр sourcepath для команды builtt builtin отключен, PATH не выполняется.

Если предоставлены какие-либо аргументы, они становятся позиционными параметрами при выполнении имени файла.

В противном случае позиционные параметры не изменяются. Статус возврата - это статус последней команды, выведенной внутри скрипта (0, если команды не выполняются), а false, если имя файла не найдено или не может быть прочитано.


6

source также возможно.

Описание для команды linux source:

source is a Unix command that evaluates the file following the command, 
as a list of commands, executed in the current context

4
#!/bin/bash
export FOO=bar

или

#!/bin/bash
FOO=bar
export FOO

человек экспорт:

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


FOO=bar
export FOO
оболочки, сценарии, переменные окружения,
Похожие вопросы