【发布时间】:2010-11-30 15:48:18
【问题描述】:
如何在 bash 脚本中设置全局环境变量?
如果我做类似的事情
#!/bin/bash
FOO=bar
...或
#!/bin/bash
export FOO=bar
...变量似乎保留在本地上下文中,而我想在脚本完成执行后继续使用它们。
【问题讨论】:
标签: shell scripting environment-variables
如何在 bash 脚本中设置全局环境变量?
如果我做类似的事情
#!/bin/bash
FOO=bar
...或
#!/bin/bash
export FOO=bar
...变量似乎保留在本地上下文中,而我想在脚本完成执行后继续使用它们。
【问题讨论】:
标签: shell scripting environment-variables
使用. 运行您的脚本
. myscript.sh
这将在当前 shell 环境中运行脚本。
export 控制哪些变量可用于新进程,所以如果你说
FOO=1
export BAR=2
./runScript.sh
那么$BAR将在runScript.sh的环境中可用,但$FOO不会。
【讨论】:
source 是 . 的别名。因此,如果您想更明确一些,可以运行 source myscript.sh。
当您运行 shell 脚本时,它是在子 shell 中完成的,因此它不会影响父 shell 的环境。您想通过以下方式获取脚本:
. ./setfoo.sh
这会在 当前 shell 的上下文中执行它,而不是作为 sub shell。
来自 bash 手册页:
。文件名 [参数]
源文件名 [参数]从当前 shell 中的文件名读取并执行命令 环境并返回最后执行的命令的退出状态 来自文件名。
如果文件名不包含斜杠,则使用 PATH 中的文件名 找到包含文件名的目录。
在 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,你会得到你想要的。
source。也许 OP 不是。
man source 很可能会返回No manual entry for source。请改用help source。这是因为source 是bash 命令语言解释器中的一个命令,所以它没有自己的手册页。为 shell 内部定义的所有命令键入 help。
#!/bin/bash
export FOO=bar
或
#!/bin/bash
FOO=bar
export FOO
人出口:
shell 应将导出属性赋予与指定名称对应的变量,这将使它们处于随后执行的命令的环境中。如果变量名后跟=word,则该变量的值应设置为word。
【讨论】:
export FOO = /mydir/bar
FOO=bar
export FOO
【讨论】: