shell脚本中的全局环境变量

时间:2009-09-23 06:25:13

标签: shell scripting environment-variables

如何在bash脚本中设置全局环境变量?

如果我做的话

#!/bin/bash
FOO=bar

...或

#!/bin/bash
export FOO=bar

... vars似乎停留在本地环境中,而我希望在脚本执行完毕后继续使用它们。

5 个答案:

答案 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