将/ proc / 1 / environ转换为变量脚本

时间:2017-02-16 12:25:53

标签: linux awk cat proc tr

环境: 旧版本的systemd正在容器中运行。默认情况下,systemd启动的服务不会获取容器的环境变量,因为systemd会删除它们以用于新启动的进程。较新版本允许通过systemd指令传递变量,但这不适用于使用较新版本。

我必须为脚本使用一些传递的环境变量,最初这很容易我想,这个小脚本已经完成了90%的工作

$ cat /proc/1/environ |tr '\0' '\n' 
HOME=/
TERM=linux

但是现在我的环境变量包含" \ n" ,这导致类似的东西

VAR=totally
screwed
up

甚至包含=或其他特殊的utf8字符等。

为什么要将这些内容正确地放入一个只将值赋给变量的脚本中,有什么聪明的吗?

最终它应该会产生类似的结果。

VAR="totally\nscrewed\up"

1 个答案:

答案 0 :(得分:1)

我的/ proc / 1 / environ文件里面没有任何奇怪的字符,所以我复制了这个文件,我打破了一些条目以接近你的情况。

这个应该可以在基于空分隔符的数组上拆分文件:

$ while IFS= read -r -d '' line ; do vars+=("$line");done <file;declare -p vars

通过使用declare -p,我们可以检查数组中的数据。

只是为了记录,readarray方法(不需要使用while循环)似乎工作正常:

IFS= readarray -t -d '' vars <file