Bash
如何在 shell 腳本中“導出”環境變數?
我有多個 Amazon EC2 賬戶,並希望能夠
$EC2_HOME
使用腳本快速切換變數,例如 。我有一個這樣的 shell 腳本:
#!/bin/sh export EC2_HOME=/home/me/.ec2 echo $EC2_HOME
當我執行腳本時,我知道它
EC2_HOME
已設置,但我認為 usingexport
會使變數在腳本完成後仍然存在。它沒有,因為執行echo $EC_HOME
不顯示任何內容。我知道這一定是非常初級的 Linux 腳本知識,但我不知道。我嘗試尋找相關問題但沒有運氣 - 如果這是重複的,我深表歉意。
您應該使用
. ./script
要麼
source ./script
當您執行腳本時,它會獲得自己的 shell 和自己的環境,一旦腳本完成,它們就會再次消失。要保留環境變數,請將腳本源到您目前的 shell 中:
$ source ./a.sh
或等效地(但更便攜)使用POSIX dot 命令:
$ . ./a.sh
然後定義將被放入您目前的 shell 環境中,並由您從它啟動的任何程序繼承。
為了更接近執行腳本,將通過搜尋環境變數
. a.sh
中的目錄來找到 a.sh。PATH
.
它們的行為方式以及是否source
相同(或根本不存在)有一些微妙之處。. ./a.sh
在每個與 POSIX 兼容的 shell 中的行為肯定是相同的,但是source
and.
,. a.sh
and. ./a.sh
, 可能會有所不同。對於 Bashsource
和.
在所有情況下都是相同的;因為zshsource
總是首先檢查目前目錄;ksh 本質上是相似的。如果腳本名稱作為路徑(包含
/
)給出,則在所有情況下都直接使用該路徑。最便攜可靠的做法是. ./script
or. /path/to/script
。