如何在bash脚本中设置全局环境变量?
如果我喜欢的话
#!/bin/bash FOO=bar
...要么
#!/bin/bash export FOO=bar
... vars似乎停留在本地环境中,而我希望在脚本执行完毕后继续使用它们.
运行您的脚本 .
. myscript.sh
这将在当前shell环境中运行脚本.
export
管理哪些变量可用于新流程,所以如果你说
FOO=1 export BAR=2 ./runScript.sh
然后$BAR
将在环境中提供runScript.sh
,但$FOO
不会.
当您运行 shell脚本时,它在子shell中完成,因此它不会影响父shell的环境.您想通过执行以下操作来获取脚本:
. ./setfoo.sh
这在当前 shell 的上下文中执行,而不是作为子 shell.
从bash手册页:
.filename [参数]
源文件名[参数]在当前shell环境中从filename读取并执行命令,并返回从filename执行的最后一个命令的退出状态.
如果filename不包含斜杠,则使用PATH中的文件名来查找包含filename的目录.
在PATH中搜索的文件不需要是可执行的.当bash不处于POSIX模式时,如果在PATH中找不到文件,则搜索当前目录.
如果关闭shopt内置命令的sourcepath选项,则不搜索PATH.
如果提供了任何参数,则在执行文件名时它们将成为位置参数.
否则,位置参数不变.返回状态是脚本中退出的最后一个命令的状态(如果没有执行命令,则为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