关于bash:env -0 dump环境。 但是如何加载呢?

env -0 dump environment. But how to load it?

linux命令行工具env可以转储当前环境。

由于有一些特殊字符我想使用env -0(以0字节而不是换行结束每个输出行)。

但是如何再次加载这个转储呢?

Bash版本:4.2.53


不要使用env; 使用declare -px,以可重新执行的形式输出导出变量的值。

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

这也为您提供了保存非导出变量的可能性,env无权访问:只需使用declare -p(删除-x选项)。

例如,如果您编写foo=$'hello
world'
,则env会生成输出

1
2
foo=hello
world

declare -px产生输出

1
2
declare -x foo="hello
world"


如果要加载env的导出,可以使用从文件设置环境变量中描述的内容:

1
2
3
4
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作为字符分隔符来循环遍历文件以标记行的结尾(更多描述在IFS =在此bash循环中执行的操作:cat file | while IFS= read -r line; do … done):

1
2
3
4
5
env -0 > env_file
while IFS= read -r -d $'\0' var
do
   export"$var"
done < env_file