在 bash 腳本中匯入環境變數

在 bash 腳本中匯入環境變數

我在終端機中設定一些環境變量,然後運行我的腳本。如何提取腳本中的變數?我需要了解他們的價值觀。簡單地稱呼它們是$MY_VAR1行不通的;它是空的。

答案1

export如果這些變數確實是呼叫腳本的環境中的環境變數(即,它們已使用 匯出),那麼它們在您的腳本中可用。它們不存在表明您尚未匯出它們,或者您從它們根本不存在的環境中執行腳本,即使它們作為 shell 變數也是如此。

例子:

$ cat script.sh
#!/bin/sh

echo "$hello"
$ sh script.sh

(輸出的一個空行,因為hello任何地方都不存在)

$ hello="hi there"
$ sh script.sh

(仍然只有一個空行作為輸出,因為hello它只是一個 shell 變量,而不是一個環境變量)

$ export hello
$ sh script.sh
hi there

或者,僅為此腳本而不是在呼叫環境中設定環境變數:

$ hello="sorry, I'm busy" sh script.sh
sorry, I'm busy
$ env hello="this works too" sh script.sh
this works too

答案2

您需要確保在呼叫腳本之前導出您想要在腳本中存取的環境變數。 IE:

Unix> export MY_TEMP=/tmp
Unix> some_script.sh

現在some_script.sh 可以存取$MY_TEMP —— 當您呼叫shell 腳本時,您將獲得一個新環境,其中僅包含導出的變量,除非您透過在腳本命令前添加句點(“.”)來“獲取”它,並且一個空格,然後是您的腳本名稱:

Unix>  . some_script.sh  # runs in current environment

偵錯提示:在腳本頂部附近包含命令set以查看腳本可以看到哪些變數。

答案3

另請注意,如果您希望它們僅在「腳本執行期間」存在,您可以將它們的匯出放入一個檔案中,然後在腳本中取得該檔案。

因為當您執行腳本時,它將在新的shell 中執行,這樣這些變數將僅在該子shell(及其後代)中導出,並且它們不會最終在您自己的shell 中,即,看起來就像您可以在腳本執行結束後自動取消設定它們。

例子:

# config.txt
export SECRET=foobar
# prog.sh
#!/usr/bin/env sh
source ./config.txt
echo $SECRET

現在運行它:

chmod +x prog.sh
./prog.sh

然後確認 SECRET 變數沒有洩漏到您自己的 shell 中:

echo $SECRET # <-- must echo a blank line

相關內容