shell脚本中的全局环境变量

Posted

技术标签:

【中文标题】shell脚本中的全局环境变量【英文标题】:Global environment variables in a shell script 【发布时间】:2010-11-30 15:48:18 【问题描述】:

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

如果我做类似的事情

#!/bin/bash
FOO=bar

...或

#!/bin/bash
export FOO=bar

...变量似乎保留在本地上下文中,而我想在脚本完成执行后继续使用它们。

【问题讨论】:

【参考方案1】:

使用. 运行您的脚本

. myscript.sh

这将在当前 shell 环境中运行脚本。

export 控制哪些变量可用于新进程,所以如果你说

FOO=1
export BAR=2
./runScript.sh

那么$BAR将在runScript.sh的环境中可用,但$FOO不会。

【讨论】:

小心第一个。如果没有斜线,它将在您的路径中查找:使用类似 '. ./myscript.sh' 如果你想确保它运行一个特定的。 source. 的别名。因此,如果您想更明确一些,可以运行 source myscript.sh 我想知道当我运行带有点和空格的脚本时会发生什么。例子 。我的脚本 @cNgamba 如果您通过阅读本页的其他答案和/或谷歌搜索找不到新问题,请提出新问题,但这是常见的常见问题解答;另见例如unix.stackexchange.com/questions/114300/…【参考方案2】:

当您运行 shell 脚本时,它是在子 shell 中完成的,因此它不会影响父 shell 的环境。您想通过以下方式获取脚本:

. ./setfoo.sh

这会在 当前 shell 的上下文中执行它,而不是作为 sub shell。

来自 bash 手册页:

。文件名 [参数]源文件名 [参数]

从当前 shell 中的文件名读取并执行命令 环境并返回最后执行的命令的退出状态 来自文件名。

如果文件名不包含斜杠,则使用 PATH 中的文件名 找到包含文件名的目录。

在 PATH 中搜索的文件不必是可执行文件。当 bash 不是 在 POSIX 模式下,如果没有找到文件,则搜索当前目录 在 PATH 中。

如果 shopt 内置命令的 sourcepath 选项被关闭, 未搜索 PATH。

如果提供了任何参数,它们将成为位置参数 当文件名被执行时。

否则位置参数不变。退货状态 是脚本中退出的最后一个命令的状态(如果没有,则为 0 命令被执行),如果文件名未找到或无法找到则返回 false 被阅读。

【讨论】:

有趣——我以前没见过这种语法。这相当于 source ./setfoo.sh 吗? 相同,只是输入速度更快(并且在旧系统上更兼容 - ksh 没有源命令,但它有 '.')。【参考方案3】:

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 的作用怎么样? @PhillipCloud 在终端输入man source,你会得到你想要的。 我熟悉source。也许 OP 不是。 @PhillipCloud 我想了解更多细节。如果您想编辑答案,您绝对可以这样做。帮助事业和所有...谢谢! man source 很可能会返回No manual entry for source。请改用help source。这是因为sourcebash 命令语言解释器中的一个命令,所以它没有自己的手册页。为 shell 内部定义的所有命令键入 help【参考方案4】:
#!/bin/bash
export FOO=bar

#!/bin/bash
FOO=bar
export FOO

人出口:

shell 应将导出属性赋予与指定名称对应的变量,这将使它们处于随后执行的命令的环境中。如果变量名后跟=word,则该变量的值应设置为word。

【讨论】:

请各位 shell 脚本初学者注意:请注意 envvar 名称、'=' 字符和值本身之间没有空格;这行不通:export FOO = /mydir/bar【参考方案5】:
FOO=bar
export FOO

【讨论】:

这个不行,它没有给父进程设置环境变量。 只有父进程才能为父进程设置环境变量。

以上是关于shell脚本中的全局环境变量的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本环境变量

shell脚本编程

Shell脚本笔记Shell变量

Linux编程 11(shell全局环境变量与局变环境变量)

环境变量—《linux命令行与shell脚本编程大全》

Shell脚本编程