'export'命令有什么作用?

Cha*_*ghe 83 unix shell command environment-variables

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

我最近开始与詹金斯合作,然后我不得不使用这个导出命令来运行jenkins war档案.所以我需要知道'export'命令的作用,以及为什么我们需要在运行jenkins时运行此命令(在jenkins home设置之后).

谢谢!

Yan*_*min 98

exportin sh和相关的shell(例如bash)标记要导出到子进程的环境变量,以便子进程继承它们.

export在POSIX中定义:

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

  • 不明白 (10认同)
  • 从这个意义上来说,什么是子进程? (4认同)

bar*_*lop 25

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

在Windows中,变量可以是永久变量.术语环境变量包括使用SET命令在cmd shell中设置的变量,以及在Windows GUI中设置变量的时间,因此在注册表中设置,并在新的cmd窗口中变为可查看.例如,windows中set命令的文档 https://technet.microsoft.com/en-us/library/bb490998.aspx "显示,设置或删除环境变量.使用不带参数,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中.

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

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

您可以使用该env命令查看环境变量

shell变量用例如just设置 a = 5

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

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

在这里,我们看到yyy设置为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

$
Run Code Online (Sandbox Code Playgroud)

其他有用的线程

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命令没有这种用法.


kat*_*ibs 5

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

  • 但是如果我说 `a=5` 然后 `echo $a` 那么它会说 5。然而你写了“在任何时候如果你改变任何变量值,shell 都无法选择这个改变。这意味着改变您使新的 shell 会话变得有效。”。<-- 那么它是如何在不导出的情况下更新 shell 会话的呢?您能举一个需要导出的例子吗? (3认同)