如何在bash脚本中设置全局环境变量?
如果我做类似的事情
#!/bin/bash
FOO=bar
...要么
#!/bin/bash
export FOO=bar
... var似乎保留在本地上下文中,而我想在脚本执行完后继续使用它们。
Answers:
使用以下命令运行脚本 .
. myscript.sh
这将在当前的shell环境中运行脚本。
export
控制哪些变量可用于新流程,所以如果您说
FOO=1
export BAR=2
./runScript.sh
那么$BAR
它将在的环境中可用runScript.sh
,但$FOO
不会。
source
是的别名.
。因此source myscript.sh
,如果您想更加明确,可以改为运行。
当你运行一个shell脚本,它在一个子壳的完成,因此它不能影响父shell的环境。您想通过以下方式来获取脚本源:
. ./setfoo.sh
这将在当前外壳程序的上下文中执行它,而不是作为子外壳程序执行。
从bash手册页:
。文件名[参数]
源文件名[参数]在当前Shell环境中从文件名读取并执行命令,并返回从文件名执行的最后一条命令的退出状态。
如果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
source
?
man source
在终端中输入@PhillipCloud ,您将得到想要的东西。
source
。也许OP不是。
#!/bin/bash
export FOO=bar
要么
#!/bin/bash
FOO=bar
export FOO
男子出口:
外壳程序应将export属性赋予与指定名称相对应的变量,这将使它们处于随后执行的命令的环境中。如果变量名后接= word,则该变量的值应设置为word。
export FOO = /mydir/bar