“导出”命令是做什么的?

我对Linux有点新鲜,而且我偶尔也会盲目地运行一些命令,以便完成任务。 我认为这样的问题不会浪费,因为更多的新人会对这些问题有一个定期的了解。

我最近开始和jenkins合作,然后我不得不使用这个出口命令来运行jenkins战争档案。 所以我需要知道一般的'export'命令是做什么 ,为什么我们需要在运行jenkins的时候运行这个命令(在jenkins home被设置之后)。

谢谢!

sh和相关的shell(比如bash )中导出 ,标记一个环境variables被导出到subprocess,以便孩子inheritance它们。

export在POSIX中定义 :

shell应该将export属性赋予与指定名称对应的variables,这会导致它们处于后续执行的命令的环境中。 如果一个variables的名字后面跟着= word,那么这个variables的值应该被设置为word。

我想你是从窗口背景来的。 所以我会对比他们(我也是一种新的Linux)。 我发现用户对我的评论的回复,对于解决问题很有帮助。

在Windows中,variables可以是永久的或不是永久的。 术语“环境variables”包含一个在SET命令的cmd shell中设置的variables,以及在windows GUI中设置variables,从而在registry中设置并在新的cmd窗口中可见的variables。 例如windows中sed命令的文档https://technet.microsoft.com/en-us/library/bb490998.aspx “显示,设置或删除环境variables。不带参数使用,set显示当前的环境设置。 在Linux中,set不显示环境variables,它显示不调用/引用为环境variables的shellvariables。 此外,Linux不使用set来设置variables(除了位置参数和shell选项,我将在后面解释为注释),只显示它们,甚至只显示shellvariables。 Windows使用set来设置和显示,例如set a = 5,linux不会。

在Linux中,我想你可以创build一个在启动时设置variables的脚本,例如/etc/profile/etc/.bashrc ,否则它们不是永久的。 他们存储在RAM中。

Linux在shellvariables和环境variables之间有一个区别。 在Linux中,shellvariables只在当前shell中,环境variables在shell和所有子shell中。

你可以使用set命令来查看shellvariables(尽pipe注意到与windows不同,variables并不是在linux中用set命令设置的)。

set -o posix; set set -o posix; set (先设置-o posix一次,不会显示太多不必要的东西)。 所以set显示shellvariables。

您可以使用env命令查看环境variables

shellvariables是用例如a=5来设置的

环境variables设置为export,export也设置shellvariables

在这里你可以看到用zzz = 5设置的shellvariableszzz,看到它在运行set时显示,但不显示为环境variables。

在这里我们看到yyy设置了导出,所以它是一个环境variables。 看到它显示在shellvariables和环境variables下

 $ 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选项/属性”,在技术上,这些是variables,尽pipe手册页可能不会这样描述它们。 但是,如上所述,set不会设置shellvariables或环境variables)。 如果你set asdf那么它将$ 1设置为asdf,如果你设置了$ 1,你会看到asdf。 如果set a=5 ,则不会设置variablesa,等于5.它将设置位置参数$ 1等于“a = 5”的string。 所以如果你看到在linux中设置a = 5,这可能是一个错误,除非有人真的想要$ 1的stringa = 5。 linux的set可以设置的另一件事是shell选项/属性。 如果你设置了,你会看到它们的列表。 你可以做例如set -o verbose ,off,打开详细的(顺便说一句,默认情况下closures,但这没有什么区别)。 或者您可以set +o verboseclosuresclosures。 Windows对其set命令没有这种用法。

简而言之,当您打开一个新的shell会话时,会设置环境variables。 在任何时候,如果你改变了任何variables值,shell就没有办法select这个变化。 这意味着您在新shell会话中所做的更改变得有效。 另一方面,导出命令提供了更新当前shell会话有关您对导出的variables进行的更改的function。您不必等到新的shell会话使用您更改的variables的值。