环境: 旧版本的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"
答案 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