2012-12-10 36 views
69

我對Linux有點新鮮,而且我偶爾會盲目地運行一些命令,以便完成任務。我認爲這不會浪費對這類問題的質疑,因爲更多的新人會對這些問題有定期的瞭解。'export'命令有什麼作用?

我最近開始與詹金斯合作,然後我不得不使用這個導出命令來運行詹金斯戰爭歸檔。所以我需要知道'export'命令在一般情況下會做什麼,以及爲什麼我們需要在運行jenkins時運行此命令(在jenkins home設置之後)。

謝謝!

+1

如果您更多地介紹了您使用的導出命令,這將有所幫助。沒有更多的上下文,我會猜測你正在設置一個環境變量。見http://en.wikipedia.org/wiki/Environment_variable#Unix –

+4

可能重複[bash:定義一個變量有或沒有導出](http://stackoverflow.com/questions/1158091/bash-defining-a-可變帶或不帶導出) – tripleee

+0

可能的[unix export command]重複(http://stackoverflow.com/questions/7328223/unix-export-command) –

回答

87
export

sh和相關殼體(如bash),標誌一個環境變量是出口到子流程,使孩子繼承它們。

export is defined in POSIX

殼須給予出口屬性對應於指定的名稱,這須安排他們在隨後執行的命令的環境中的變量。如果變量的名稱後跟= = word,則該變量的值應設置爲word。

+0

非常感謝!你所有的答案都很有幫助,他們也會指導你學習更多的東西! :-) –

+0

從這個意義上說什麼是兒童過程? –

+6

不明白 –

2

簡而言之,當您打開新的shell會話時會設置環境變量。在任何時候如果你改變了任何變量值,shell就沒有辦法選擇這個變化。這意味着您所做的更改在新shell會話中生效。 另一方面,導出命令提供了更新當前shell會話有關您對導出變量所做更改的功能。您不必等到新shell會話使用您更改的變量的值。

+1

但是,如果我說'a = 5',那麼'echo $ a'然後它說5。然而,你隨時寫道:如果你改變了任何變量值,shell就沒有辦法選擇這種變化,這意味着你在新的shell會話中所做的改變變得有效。「 < - 那麼它如何在沒有導出的情況下更新shell會話。你可以給出一個例子,在哪裏出口是必要的? – barlop

+0

在shell會話期間設置的變量是一個shell變量。它是本地的並且可以被當前shell會話訪問。您可以隨時更改它,並且當前的值可用於當前的shell進程而無需導出更改。另一方面在登錄時設置環境變量。當你改變它們的任何一個值時,你需要執行一些簡單的操作來刷新當前shell進程和任何新的子進程的新值。這就是出口的功能。 – katwekibs

18

我想你是從窗口背景來的。所以我會對它們進行比較(我對Linux也很陌生)。我發現用戶對我的評論的回覆,對於解決問題很有用。

在Windows中,變量可以是永久的或不是永久的。術語環境變量包含一個在SET命令的cmd shell中設置的變量,以及在windows GUI中設置變量(因此在註冊表中設置變量並在新的cmd窗口中變爲可見)。例如「windows中的sed命令文檔」https://technet.microsoft.com/en-us/library/bb490998.aspx「顯示,設置或刪除環境變量。不帶參數使用時,set將顯示當前的環境設置。」在Linux中,set不顯示環境變量,它顯示不調用/引用爲環境變量的shell變量。此外,Linux不使用set來設置變量(除了位置參數和shell選項外,我將在後面解釋爲註釋),僅用於顯示它們,甚至僅用於顯示shell變量。 Windows使用設置來設置和顯示例如設置a = 5,linux不會。

在Linux中,我想你可以創建一個在啓動時設置變量的腳本, /etc/profile/etc/.bashrc但除此之外,它們不是永久性的。它們存儲在RAM中。

Linux在shell變量和環境變量之間有一個區別。在Linux中,shell變量只在當前shell中,環境變量在該shell和所有子shell中。

您可以使用set命令查看shell變量(儘管請注意,與windows不同,使用set命令不會在linux中設置變量)。

set -o posix; set(做這個設置-o posix第一次,幫助不顯示太多不必要的東西)。因此set顯示shell變量。

可以查看與env命令

殼變量都設置與例如環境變量只是a=5

環境變量設置有出口,出口也設置了shell變量

這裏你可以看到shell變量ZZZ設定ZZZ = 5,看看它顯示了運行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,如果你這樣做echo $1,你會看到asdf。如果你做set a=5它不會設置變量a,等於5.它將設置位置參數$ 1等於字符串「a = 5」。所以如果你看到在Linux中設置a = 5這可能是一個錯誤,除非有人真的想要字符串a = 5,在$ 1中。 linux的set可以設置的另一件事是shell選項/屬性。如果你設置了,你會看到它們的列表。你可以做例如set -o verbose,關閉,以打開詳細的(順便說一句,默認情況下關閉,但這沒有什麼區別)。或者你可以做set +o verbose來關閉詳細信息。 Windows對其set命令沒有這種用法。

+0

看起來像集顯示外殼和環境,而'env'只顯示環境 – barlop

+1

像這個答案很多,因爲它涵蓋了nix vs win的情況,最初可能會引起混淆。 – N0thing

相關問題