90

为了完成任务,我碰巧盲目地运行了一些命令。

我最近开始使用Jenkins,然后我不得不使用这个export命令来运行Jenkins WAR 存档。该export命令一般做什么,为什么我们需要在运行 Jenkins 时运行这个命令(在设置 Jenkins 主页之后)?

4

3 回答 3

103

exportsh和相关的 shell(如 Bash)中,标记要导出到子进程的环境变量,以便子进程继承它们。

export在 POSIX 中定义

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

于 2012-12-10T05:03:35.140 回答
31

我猜你来自 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,但它没有显示为环境变量。

在这里,我们看到yyyset 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:

注意:有一点详细说明并且对我所写的内容有所纠正,那就是,在 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 命令没有这种用法。

于 2015-07-16T19:19:34.393 回答
6

简单来说,环境变量是在您打开一个新的 shell 会话时设置的。在任何时候,如果您更改任何变量值,shell 都无法选择该更改。这意味着您所做的更改在新的 shell 会话中生效。

export另一方面,该命令提供了更新当前 shell 会话有关您对导出变量所做更改的能力。您不必等到新的 shell 会话才能使用您更改的变量的值。

于 2015-05-16T09:51:41.140 回答