我需要將環境變數保存到文件中,並且(稍後)進程應該導入它們。我需要這個來解決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
。