Как установить глобальную переменную среды в сценарии bash?
Если я сделаю что-то вроде
#!/bin/bash
FOO=bar
...или же
#!/bin/bash
export FOO=bar
... похоже, что вары остаются в локальном контексте, тогда как я хотел бы продолжать использовать их после завершения выполнения скрипта.
source
это псевдоним для.
. Так что вы можете бежатьsource myscript.sh
вместо этого, если хотите быть более откровенным.Когда вы запускаете сценарий оболочки, он выполняется во вспомогательной оболочке, поэтому он не может повлиять на среду родительской оболочки. Вы хотите создать скрипт, выполнив:
Это выполняет его в контексте текущей оболочки, а не как вспомогательную оболочку.
На странице руководства bash:
источник
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
источник
source
делает?man source
в терминал, и вы получите то, что хотите.source
. Может быть, OP нет.#!/bin/bash export FOO=bar
или же
#!/bin/bash FOO=bar export FOO
человек экспорт:
Оболочка должна присвоить атрибут экспорта переменным, соответствующим указанным именам, что приведет к их нахождению в среде последующих выполняемых команд. Если за именем переменной следует = word, тогда значение этой переменной должно быть установлено в word.
источник
export FOO = /mydir/bar
FOO=bar export FOO
источник