/proc/pid/environをenvコマンドの引数に確実に変換する方法は?

/proc/pid/environをenvコマンドの引数に確実に変換する方法は?

/proc/pid/environをenvコマンドの引数に確実に変換する方法は?

  • IFS=$'\n' ; env -i $(xargs -0n1 -a /proc/$$/environ)すべての環境変数に改行文字がない場合にのみ機能します。
  • IFS=$'\0'BashとDashでは動作しません。

利用可能な他の方法はありますか(他のシェル方法を含む)?

答え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|
...

関連情報