如何可靠地将 /proc/pid/environ 转换为 env 命令的参数?
IFS=$'\n' ; env -i $(xargs -0n1 -a /proc/$$/environ)
仅当所有环境变量都没有换行符时才有效。IFS=$'\0'
在 bash 和 dash 中不起作用。
还有其他可用的方式(包括任何其他shell方式)吗?
答案1
在 bash 中,您可以从文件中的条目创建一个数组environ
,并使用数组元素作为参数env
:
mapfile -d '' envs < /proc/$$/environ
env -i "${envs[@]}" ...
它似乎适用于换行符:
$ foo=$'a\nb' bash
$ mapfile -d '' envs < /proc/$$/environ
$ printf '|%s|\n' "${envs[@]}"
|foo=a
b|
|LC_MEASUREMENT=en_GB.UTF-8|
|SSH_CONNECTION=127.0.0.1 33066 127.0.0.1 22|
...