'export'命令有什么作用?

时间:2012-12-10 05:00:27

标签: shell unix command environment-variables

我对Linux有点新,我碰巧盲目地运行一些命令,以便完成任务。我认为提出这些类型的问题不会浪费,因为更多的新人会对这些问题有一定的了解。

我最近开始使用Jenkins,然后我不得不使用此export命令来运行Jenkins war archive。所以我需要知道export命令的一般操作,以及为什么我们需要运行这个命令,同时运行Jenkins(在设置Jenkins home之后)。

谢谢!

3 个答案:

答案 0 :(得分:95)

export中的{p> sh和相关的shell(例如bash)标记了一个环境变量导出到子进程,以便子进程继承他们。

export is defined in POSIX

  

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

答案 1 :(得分:24)

我猜你是从windows背景来的。所以我会对比它们(我也是Linux的新手)。我找到了用户对我评论的回复,对于解决问题非常有用。

在Windows中,变量可以是永久变量。术语环境变量包括使用SET命令在cmd shell中设置的变量,以及在Windows GUI中设置变量的时间,因此在注册表中设置,并在新的cmd窗口中变为可查看。例如Windows https://technet.microsoft.com/en-us/library/bb490998.aspx中set命令的文档“显示,设置或删除环境变量。使用不带参数,set显示当前环境设置。”在Linux中,set不显示环境变量,它显示它不调用/引用的shell变量作为环境变量。此外,Linux不使用set来设置变量(除了位置参数和shell选项,我在最后解释为注释),只显示它们,甚至只显示shell变量。 Windows使用set来设置和显示例如设置a = 5,linux没有。

在Linux中,我猜你可以创建一个在启动时设置变量的脚本,例如: /etc/profile/etc/.bashrc但除此之外,它们不是永久性的。它们存储在RAM中。

Linux在shell变量和环境变量之间存在差异。在Linux中,shell变量仅存在于当前shell中,而环境变量位于该shell和所有子shell中。

您可以使用set命令查看shell变量(但请注意,与windows不同,变量未在linux中使用set命令设置)。

set -o posix; set(先做一次-o posix设置,有助于不显示太多不必要的东西)。所以set显示shell变量。

您可以使用env命令

查看环境变量

shell变量设置为例如只是a = 5

环境变量是使用export设置的,export也设置了shell变量

在这里,您可以看到使用zzz = 5设置的shell变量zzz,并在运行set时看到它显示但未显示为环境变量。

这里我们看到yyy设置了导出,所以它是一个环境变量。并且看到它在shell变量和环境变量下显示

$ zzz=5

$ set | grep zzz
zzz=5

$ env | grep zzz

$ export yyy=5

$ set | grep yyy
yyy=5

$ env | grep yyy
yyy=5

$

其他有用的线程

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中设置a = 5,那么除非有人真的想要那个字符串a = 5,否则它可能是一个错误。 linux的集合可以设置的另一件事是shell选项/属性。如果你设置-o,你会看到它们的列表。你可以做例如set -o verbose,关闭,以打开详细(顺便说一下,默认情况下是关闭的,但这对此没有任何影响)。或者您可以set +o verbose关闭详细信息。 Windows的set命令没有这种用法。

答案 2 :(得分:5)

简单来说,在打开新的shell会话时会设置环境变量。在任何时候,如果您更改任何变量值,shell都无法选择该更改。这意味着您所做的更改在新的shell会话中生效。 另一方面,export命令提供了更新当前shell会话的功能,该会话涉及您对导出变量所做的更改。您不必等到新的shell会话才能使用您更改的变量的值。