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