env -0 转储环境。但是如何加载呢?
env -0 dump environment. But how to load it?
linux命令行工具env
可以转储当前环境。
因为我想使用一些特殊字符env -0
(每个输出行以 0 字节而不是换行结束)。
但是如何再次加载这个转储?
Bash版本:4.2.53
如果您想加载 env
的导出,您可以使用 Set environment variables from file:
中描述的内容
env > env_file
set -o allexport
source env_file
set +o allexport
但是如果你碰巧用 -0
导出它使用(来自 man env
):
-0, --null
end each output line with 0 byte rather than newline
因此您可以使用 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 $'[=11=]' var
do
export "$var"
done < env_file
不要使用env
;使用 declare -px
,它以可以重新执行的形式输出导出变量的值。
$ declare -px > env.sh
$ source env.sh
这也使您可以保存 非 导出的变量,env
无法访问:只需使用 declare -p
(删除 -x
选项)。
例如,如果您编写 foo=$'hello\nworld'
,env
会产生输出
foo=hello
world
而 declare -px
产生输出
declare -x foo="hello
world"
linux命令行工具env
可以转储当前环境。
因为我想使用一些特殊字符env -0
(每个输出行以 0 字节而不是换行结束)。
但是如何再次加载这个转储?
Bash版本:4.2.53
如果您想加载 env
的导出,您可以使用 Set environment variables from file:
env > env_file
set -o allexport
source env_file
set +o allexport
但是如果你碰巧用 -0
导出它使用(来自 man env
):
-0, --null
end each output line with 0 byte rather than newline
因此您可以使用 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 $'[=11=]' var
do
export "$var"
done < env_file
不要使用env
;使用 declare -px
,它以可以重新执行的形式输出导出变量的值。
$ declare -px > env.sh
$ source env.sh
这也使您可以保存 非 导出的变量,env
无法访问:只需使用 declare -p
(删除 -x
选项)。
例如,如果您编写 foo=$'hello\nworld'
,env
会产生输出
foo=hello
world
而 declare -px
产生输出
declare -x foo="hello
world"