Глобальные переменные окружения в оболочке script
Как установить глобальную переменную окружения в bash script?
Если я делаю что-то вроде
#!/bin/bash
FOO=bar
... или
#!/bin/bash
export FOO=bar
... vars, кажется, остаются в локальном контексте, тогда как я хотел бы продолжать использовать их после завершения выполнения script.
Ответы
Ответ 1
Запустите script с помощью .
. myscript.sh
Это приведет к запуску script в текущей среде оболочки.
export
определяет, какие переменные будут доступны для новых процессов, поэтому, если вы скажете
FOO=1
export BAR=2
./runScript.sh
тогда $BAR
будет доступен в среде runScript.sh
, но $FOO
не будет.
Ответ 2
Когда вы запускаете оболочку script, она выполняется в под-оболочке, поэтому она не может влиять на родительскую оболочку. Вы хотите, чтобы источник script выполнил:
. ./setfoo.sh
Выполняет его в контексте текущей оболочки, а не как подклассу.
На странице bash man:
. filename [аргументы]
исходное имя файла [аргументы]
Чтение и выполнение команд из имени файла в текущей оболочке окружающей среды и вернуть статус выхода последней выполненной команды от имени файла.
Если имя файла не содержит косой черты, имена файлов в PATH используются для найдите каталог, содержащий имя файла.
Поиск файла в PATH не обязательно должен выполняться. Когда bash не в режиме POSIX выполняется поиск текущего каталога, если файл не найден в PATH.
Если опция sourcepath для встроенной команды магазина отключена, PATH не выполняется.
Если имеются какие-либо аргументы, они становятся позиционными параметрами при выполнении имени файла.
В противном случае позиционные параметры не изменяются. Статус возврата - это статус последней команды, выходящей из script (0, если нет команды выполняются), а false, если имя файла не найдено или не может читайте.
Ответ 3
source myscript.sh
также возможно.
Описание для команды 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
man export:
Оболочка должна предоставить атрибут экспорта переменным, соответствующим указанным именам, что приведет к тому, что они будут находиться в среде последующих команд. Если за именем переменной следует слово = слово, то значение этой переменной должно быть установлено на слово.
Ответ 5
FOO=bar
export FOO