匯出(儲存)和匯入(來源)shell 變數

匯出(儲存)和匯入(來源)shell 變數

我需要將環境變數保存到文件中,並且(稍後)進程應該導入它們。我需要這個來解決fooprog在執行 a 之前使環境無效的程序barscript,並且我需要 中的一些環境變數barscript。因此,我計劃在執行之前將所有環境變數保存到文件中fooprogram,並barscript從文件中獲取它們。

我嘗試了這個,但如果有包含空格的變量,它就不起作用。

$ env > my_environment
$ . my_environment

我想正確的方法是以某種方式擺弄/proc/$$/environ和解析它barscript,但我找不到正確的方法。

編輯:引號或換行符號也有問題。如何才能毫無問題地取得像以下這樣有問題的環境變數?

PROBLEMATIC='this has double quotes " and single quotes '\'' and even
newlines.

See?'

答案1

$ declare -p > my_environment

後來,裡面barscript

. my_environment

declare -p以 shell 可執行的形式輸出環境變量,包括根據需要引用和轉義變量。

$ foobar='"some double-quoted text"'
$ echo $foobar 
"some double-quoted text"
$ declare -p foobar
declare -- foobar="\"some double-quoted text\""

順便說一句,如果您不想輸出整個環境,則不必這樣做。只需命名要在命令列上輸出的變數declare -p

$ declare -p HOME PATH foobar
declare -x HOME="/home/cas"
declare -x PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11"
declare -- foobar="\"double-quoted-text\""

或透過管道grep -v排除您不希望在輸出中出現的特定變數。

僅取得導出的變數:

declare -p -x > my_environment

有關更多信息,請help declare參閱bash

相關內容