“导出”命令有什么作用?


85

我对Linux有点陌生,我碰巧盲目地运行了一些命令以完成任务。我认为这不会浪费这些问题,因为更多的新人们会对此有所了解。

我最近开始与Jenkins合作,然后必须使用此export命令来运行Jenkins战争档案。因此,我需要知道export一般情况下执行什么命令,以及为什么需要在运行Jenkins时(设置Jenkins主页之后)运行此命令。

谢谢!


1
如果您对使用的导出命令有更多的了解,这将有所帮助。没有更多的上下文,我猜您正在设置环境变量。参见en.wikipedia.org/wiki/Environment_variable#Unix
Joshua D. Boyd


Answers:


99

exportinsh和相关外壳程序(例如bash)中,标记了要导出到子进程的环境变量,以便子进程继承它们。

export在POSIX中定义

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


非常感谢!您的所有答案都非常有帮助,它们还会指导您学习更多内容!:-)
Chathura Kulasinghe 2012年

1
从这个意义上说,子进程是什么?
紫南星

13
听不懂
Martin Hansen

@MartinHansen你不明白吗?另外,请参阅我的答案。
barlop '16

链接末尾有一个额外的方括号,我无法对其进行编辑,因为它是一个符号的编辑:)
Radoslav Stoyanov

27

我想您来自Windows背景。因此,我将它们进行对比(我也是linux的新手)。我发现用户对我的评论的回复对解决问题很有用。

在Windows中,变量可以是永久变量,也可以不是永久变量。术语“环境变量”包括使用SET命令在cmd外壳中设置的变量,以及在Windows GUI中设置变量(因此在注册表中设置)并在新的cmd窗口中可见的情况。例如Windows https://technet.microsoft.com/zh-cn/library/bb490998.aspx中set命令的文档 “显示,设置或删除环境变量。不带参数使用时,set将显示当前环境设置。” 在Linux中,set不显示环境变量,它显示不调用/称为环境变量的shell变量。另外,Linux不使用set来设置变量(位置参数和shell选项除外,我将在后面作为注释进行解释)仅用于显示它们,甚至仅用于显示shell变量。Windows使用set进行设置和显示,例如set a = 5,Linux则没有。

在Linux中,我想你可以做一个脚本,在启动时,如将变量/etc/profile/etc/.bashrc否则,他们不是永久性的。它们存储在RAM中。

在Linux中,shell变量和环境变量之间存在区别。在Linux中,外壳程序变量仅在当前外壳程序中,而环境变量在该外壳程序和所有子外壳程序中。

您可以使用set命令查看外壳程序变量(尽管请注意,与Windows不同,在Linux中,不会使用set命令设置变量)。

set -o posix; set (先设置一次-o posix,不会显示太多不必要的内容)。因此set显示外壳变量。

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

外壳变量设置例如 a = 5

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

在这里,您可以看到shell变量zzz设置为zzz = 5,并在运行时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

$

其他有用的线程

/unix/176001/how-can-i-list-all-shell-variables

/ubuntu/26318/environment-variable-vs-shell-variable-whats-the-difference

注意-需要详细说明一点并与我所写内容相符的一点是,在Linux bash中,“设置”可用于设置“位置参数”和“外壳选项/属性”,从技术上讲,这些是变量,尽管手册页可能不会这样描述它们。但是,如上所述,set不会设置shell变量或环境变量。如果这样做, set asdf则它将$ 1设置为asdf,如果看到,echo $1则会看到asdf。如果你这样做set a=5它不会将变量a设置为等于5。它将位置参数$ 1设置为等于字符串“ a = 5”。因此,如果您曾经在Linux中看到set a = 5,那可能是一个错误,除非有人真正想要$ 1中的字符串a = 5。linux的设置可以设置的另一件事是shell选项/属性。如果您设置-o,则会看到它们的列表。您可以执行例如set -o verboseoff来打开详细信息(默认情况是off,但这没什么区别)。或者您可以set +o verbose关闭详细信息。Windows的set命令没有这种用法。


看起来像布景显示外壳和环境,而“ env”仅显示环境
barlop 2015年

1
像这样的答案很常见,因为它涵盖了起初可能会造成混淆的nix vs win案例。
N0th

6

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


1
但是,如果我说了a=5然后echo $a说了5。但是您写道:“在任何时候更改任何变量值,shell都无法选择该更改。这意味着您所做的更改将在新的shell会话中生效。” 。<-那么它如何在不导出的情况下更新Shell会话。您可以举一个需要导出的示例吗?
barlop

您在shell会话期间设置的变量是shell变量。它是本地的,并且当前Shell会话可以访问。您可以随时更改它,并且它的当前值将可用于当前的Shell进程,而无需导出更改。另一方面,在登录时设置环境变量。当更改它们的任何值时,您需要执行简单地称为刷新的操作,以使新值可用于当前Shell进程和任何新的子进程。多数民众赞成正是出口。
katwekibs 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.