我对Linux有点陌生,我碰巧盲目地运行了一些命令以完成任务。我认为这不会浪费这些问题,因为更多的新人们会对此有所了解。
我最近开始与Jenkins合作,然后必须使用此export
命令来运行Jenkins战争档案。因此,我需要知道export
一般情况下执行什么命令,以及为什么需要在运行Jenkins时(设置Jenkins主页之后)运行此命令。
谢谢!
我对Linux有点陌生,我碰巧盲目地运行了一些命令以完成任务。我认为这不会浪费这些问题,因为更多的新人们会对此有所了解。
我最近开始与Jenkins合作,然后必须使用此export
命令来运行Jenkins战争档案。因此,我需要知道export
一般情况下执行什么命令,以及为什么需要在运行Jenkins时(设置Jenkins主页之后)运行此命令。
谢谢!
Answers:
export
insh
和相关外壳程序(例如bash
)中,标记了要导出到子进程的环境变量,以便子进程继承它们。
外壳程序应将export属性赋予与指定名称相对应的变量,这将使它们处于随后执行的命令的环境中。如果变量名后接= word,则该变量的值应设置为word。
我想您来自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 verbose
off来打开详细信息(默认情况是off,但这没什么区别)。或者您可以set +o verbose
关闭详细信息。Windows的set命令没有这种用法。
简而言之,当您打开新的Shell会话时,将设置环境变量。在任何时候,如果您更改任何变量值,则Shell都无法选择该更改。这意味着您所做的更改将在新的Shell会话中生效。export
另一方面,该命令提供了有关您对导出变量所做的更改来更新当前Shell会话的功能。您不必等到新的shell会话就可以使用更改的变量的值。
a=5
然后echo $a
说了5。但是您写道:“在任何时候更改任何变量值,shell都无法选择该更改。这意味着您所做的更改将在新的shell会话中生效。” 。<-那么它如何在不导出的情况下更新Shell会话。您可以举一个需要导出的示例吗?