2016-08-24 70 views
3

linux命令行工具env可以轉儲當前環境。env-dump環境。但如何加載它?

由於我想使用一些特殊字符env -0(每個輸出行用0字節結束,而不是換行)。

但是如何再次加載這個轉儲?

猛砸版本:4.2.53

+0

你是什麼意思與'load'? – hek2mgl

+0

@ hek2mgl「load」我的意思是在不同的shell中設置這些變量。 – guettli

回答

8

不要使用env;使用declare -px,它以可以重新執行的形式輸出導出變量的值。

$ declare -px > env.sh 
$ source env.sh 

這也給你節省 -exported變量以及的可能性,這env沒有訪問:只使用declare -p(丟棄-x選項)。


例如,如果你寫foo=$'hello\nworld'env產生輸出

foo=hello 
world 

declare -px產生輸出

declare -x foo="hello 
world" 
+0

是的,即使換行符在變量中也可以工作。謝謝。 – guettli

3

如果要加載的env出口可以使用什麼是Set environment variables from file描述:

env > env_file 
set -o allexport 
source env_file 
set +o allexport 

但是,如果你碰巧有-0出口它使用(從man env):

-0,--null
端與0字節Rath的每條輸出線呃比換行符

所以,你可以循環使用,通過作爲0字符分隔符的文件,標誌着該行的端部(What does IFS= do in this bash loop: cat file | while IFS= read -r line; do … done更多說明):

env -0 > env_file 
while IFS= read -r -d $'\0' var 
do 
    export "$var" 
done < env_file 
+0

第一個解決方案在我的情況下不起作用:'env> env_file''set -o allexport'' source env_file' output' -bash:PROFILEREAD:只讀變量bash:52052:找不到命令...(很多命令沒有找到消息)' – guettli

+1

第二種解決方案(env-0)有效,除了:'PROFILEREAD只讀變量' – guettli

+0

@guettli uhms,這是因爲你的變量設置爲只讀。有[關於如何重置他們](http://stackoverflow.com/a/17398009/1983854)... – fedorqui