如何在bash脚本中设置全局环境变量?
如果我做的话
#!/bin/bash
FOO=bar
...或
#!/bin/bash
export FOO=bar
... vars似乎停留在本地环境中,而我希望在脚本执行完毕后继续使用它们。
答案 0 :(得分:132)
使用.
. myscript.sh
这将在当前shell环境中运行脚本。
export
管理哪些变量可供新进程使用,所以如果你说
FOO=1
export BAR=2
./runScript.sh
然后$BAR
将在runScript.sh
的环境中提供,但$FOO
则不会。
答案 1 :(得分:50)
当你运行一个shell脚本时,它在子shell中完成,因此它不会影响父shell的环境。您希望通过执行以下操作来获取脚本:
. ./setfoo.sh
这在当前 shell的上下文中执行,而不是作为 sub shell。
来自bash手册页:
即可。 filename [参数]
源文件名[参数]从当前shell中的filename读取并执行命令 环境并返回执行的最后一个命令的退出状态 来自文件名。
如果filename不包含斜杠,则使用PATH中的文件名 找到包含文件名的目录。
在PATH中搜索的文件无需执行。当bash不是 在POSIX模式下,如果没有找到文件,则搜索当前目录 在PATH。
如果关闭shopt builtin命令的sourcepath选项, 不搜索PATH。
如果提供了任何参数,它们将成为位置参数 当执行文件名时。
否则位置参数不变。返回状态 是脚本中退出的最后一个命令的状态(如果没有,则为0) 命令被执行),如果找不到或不能找到文件名则为false 请阅读。
答案 2 :(得分:8)
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
答案 3 :(得分:4)
#!/bin/bash
export FOO=bar
或
#!/bin/bash
FOO=bar
export FOO
man export:
shell应将export属性赋予与指定名称对应的变量,这将使它们处于随后执行的命令的环境中。如果变量的名称后跟= word,则该变量的值应设置为word。
答案 4 :(得分:-3)
FOO=bar
export FOO