我对Linux有点新鲜,而且我偶尔也会盲目地运行一些命令,以便完成任务。 我认为,这样的问题不会浪费,因为更多的新人会对这些问题有一个定期的了解。
我最近开始和jenkins合作,然后我不得不使用这个出口命令来运行jenkins战争档案。 所以我需要知道一般的'export'命令是做什么的 ,为什么我们需要在运行jenkins的时候运行这个命令(在jenkins home被设置之后)。
谢谢!
在sh
和相关的shell(比如bash
)中导出 ,标记一个环境变量被导出到子进程,以便孩子继承它们。
export
在POSIX中定义 :
shell应该将export属性赋予与指定名称对应的变量,这会导致它们处于后续执行的命令的环境中。 如果一个变量的名字后面跟着= word,那么这个变量的值应该被设置为word。
我想你是从窗口背景来的。 所以我会对比他们(我也是一种新的Linux)。 我发现用户对我的评论的回复,对于解决问题很有帮助。
在Windows中,变量可以是永久的或不是永久的。 术语“环境变量”包含一个在SET命令的cmd shell中设置的变量,以及在windows GUI中设置变量,从而在注册表中设置并在新的cmd窗口中可见的变量。 例如windows中的sed命令的文档https://technet.microsoft.com/en-us/library/bb490998.aspx “显示,设置或删除环境变量。不带参数使用,设置显示当前的环境设置。 在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中。
你可以使用set
命令来查看shell变量(尽管注意到与windows不同,变量并不是在linux中用set命令设置的)。
set -o posix; set
set -o posix; set
(先设置-o posix一次,不会显示太多不必要的东西)。 所以set
显示外壳变量。
您可以使用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,如果你设置了$ 1,你会看到asdf。 如果set a=5
,则不会设置变量a,等于5.它将设置位置参数$ 1等于“a = 5”的字符串。 所以如果你看到在linux中设置a = 5,这可能是一个错误,除非有人真的想要$ 1的字符串a = 5。 linux的set可以设置的另一件事是shell选项/属性。 如果你设置了,你会看到它们的列表。 你可以做例如set -o verbose
,off,打开详细的(顺便说一句,默认情况下关闭,但这没有什么区别)。 或者您可以set +o verbose
关闭关闭。 Windows对其set命令没有这种用法。
简而言之,当您打开一个新的shell会话时,会设置环境变量。 在任何时候,如果你改变了任何变量值,shell就没有办法选择这个变化。 这意味着您在新shell会话中所做的更改变得有效。 另一方面,导出命令提供了更新当前shell会话有关您对导出的变量进行的更改的功能。您不必等到新的shell会话使用您更改的变量的值。