env -0转储环境。但是如何加载呢?

时间:2016-08-24 09:03:57

标签: bash environment-variables env

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

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

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

Bash版本:4.2.53

2 个答案:

答案 0 :(得分:11)

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

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

这也使您可以保存 - 导出的变量,env无法访问:只使用declare -p(删除{{1选项)。

例如,如果您编写了-xfoo=$'hello\nworld'会生成输出

env

foo=hello world 产生输出

declare -px

答案 1 :(得分:4)

如果您要加载env的导出,可以使用Set environment variables from file中描述的内容:

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

但是,如果您碰巧使用-0导出,则使用(来自man env):

  

-0, - null
            以0字节而不是换行符结束每个输出行

因此,您可以使用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