Bash

如何在 shell 腳本中“導出”環境變數?

  • March 18, 2020

我有多個 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 中的行為肯定是相同的,但是sourceand ., . a.shand . ./a.sh, 可能會有所不同。對於 Bashsource.在所有情況下都是相同的;因為zshsource總是首先檢查目前目錄;ksh 本質上是相似的。

如果腳本名稱作為路徑(包含/)給出,則在所有情況下都直接使用該路徑。最便攜可靠的做法是. ./scriptor . /path/to/script

引用自:https://unix.stackexchange.com/questions/30189