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

convert /proc/1/environ to variables script

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

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

$ cat /proc/1/environ |tr '[=11=]' '\n' 
HOME=/
TERM=linux

但现在我确实有包含 "\n" 的环境变量,这会导致类似的结果

VAR=totally
screwed
up

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

有什么聪明的方法可以将这些内容正确地放入一个只将值分配给变量的脚本中吗?

最后应该是这样的吧

VAR="totally\nscrewed\up"

我的 /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