为了完成任务,我碰巧盲目地运行了一些命令。
我最近开始使用Jenkins,然后我不得不使用这个export
命令来运行Jenkins WAR 存档。该export
命令一般做什么,为什么我们需要在运行 Jenkins 时运行这个命令(在设置 Jenkins 主页之后)?
为了完成任务,我碰巧盲目地运行了一些命令。
我最近开始使用Jenkins,然后我不得不使用这个export
命令来运行Jenkins WAR 存档。该export
命令一般做什么,为什么我们需要在运行 Jenkins 时运行这个命令(在设置 Jenkins 主页之后)?
export
在sh
和相关的 shell(如 Bash)中,标记要导出到子进程的环境变量,以便子进程继承它们。
shell 应将导出属性赋予与指定名称对应的变量,这将使它们处于随后执行的命令的环境中。如果变量名后跟= word,则该变量的值应设置为word。
我猜你来自 Windows 背景。所以我将对比它们(我对 Linux 也很陌生)。我发现一个用户对我的评论的回复,对弄清楚事情很有用。
在 Windows 中,变量可以是永久的,也可以不是。术语环境变量包括使用 SET 命令在cmd shell 中设置的变量,以及在 Windows GUI 中设置变量时,因此在注册表中设置,并在新的 cmd 窗口中可见。
例如, Windows 中set命令的文档“显示、设置或删除环境变量。不带参数使用时,set 显示当前环境设置。”
在 Linux 中,set不显示环境变量。它显示了它不调用/引用为环境变量的 shell 变量。此外,Linux 不使用 set 来设置变量(除了位置参数和 shell 选项,我在最后解释为注释),只显示它们,即使这样也只显示 shell 变量。Windows 使用set进行设置和显示,例如set a=5
,但 Linux 没有。
在 Linux 中,我猜你可以编写一个脚本,在启动时设置变量,例如,/etc/profile
或/etc/.bashrc
,但除此之外,它们不是永久性的。它们存储在 RAM 中。
在 Linux 中,shell 变量和环境变量是有区别的。在 Linux 中,shell 变量仅在当前 shell 中,环境变量在该 shell 和所有子 shell 中。
您可以使用命令查看 shell 变量set
(但请注意,与 Windows 不同,在 Linux 中不使用set命令设置变量)。
set -o posix; set
(先这样做set -o posix
一次,有助于不显示太多不必要的东西)。因此set
显示 shell 变量。
env
您可以使用该命令查看环境变量。
Shell 变量设置为,例如,just a = 5
。
使用export设置环境变量。导出还设置 shell 变量。
在这里,您看到 shell 变量zzz设置为zzz = 5
,并看到它在运行时显示set
,但它没有显示为环境变量。
在这里,我们看到yyy
set with export,所以它是一个环境变量。并查看它在 shell 变量和环境变量下的显示:
$ zzz=5
$ set | grep zzz
zzz=5
$ env | grep zzz
$ export yyy=5
$ set | grep yyy
yyy=5
$ env | grep yyy
yyy=5
$
其他有用的 QnA:
https://unix.stackexchange.com/questions/176001/how-can-i-list-all-shell-variables
https://askubuntu.com/questions/26318/environment-variable-vs-shell-variable-whats-the-difference
注意:有一点详细说明并且对我所写的内容有所纠正,那就是,在 Linux bash 中,'set' 可用于设置“位置参数”和“shell 选项/属性”,从技术上讲这些是变量,尽管手册页可能没有这样描述它们。
但是,如前所述,set 不会设置 shell 变量或环境变量)。如果你这样做,set asdf
那么它会将 $1 设置为 asdf,如果你这样做,echo $1
你会看到asdf。
如果你这样做set a=5
,它不会将变量 a 设置为等于 5。它将位置参数 $1 设置为等于“a=5”的字符串。因此,如果您曾经在 Linux 中看到 set a=5,那可能是一个错误,除非有人真的想要字符串 a=5,在 $1 中。
Linux 的set可以设置的另一件事是 shell 选项/属性。如果你确实 set -o 你会看到它们的列表。例如set -o verbose
,您可以执行关闭,以打开详细信息(顺便说一下,默认值恰好是关闭的,但这对此没有影响)。或者您可以set +o verbose
关闭详细信息。Windows 的 set 命令没有这种用法。
简单来说,环境变量是在您打开一个新的 shell 会话时设置的。在任何时候,如果您更改任何变量值,shell 都无法选择该更改。这意味着您所做的更改在新的 shell 会话中生效。
export
另一方面,该命令提供了更新当前 shell 会话有关您对导出变量所做更改的能力。您不必等到新的 shell 会话才能使用您更改的变量的值。