Como converter de forma confiável / proc / pid / environ em argumentos para o comando env?

1

Como faço para converter / proc / pid / environ confiável em argumento para o comando env?

  • IFS=$'\n' ; env -i $(xargs -0n1 -a /proc/$$/environ) só funciona quando todas as variáveis de ambiente não possuem o caractere de nova linha.
  • IFS=$'%code%' não está funcionando no bash e no traço.

Existe alguma outra maneira disponível (incluindo qualquer outra maneira de shell)?

    
por illiterate 15.02.2018 / 10:00

1 resposta

3

No bash, você pode criar uma matriz a partir de entradas no arquivo environ e usar os elementos da matriz como argumentos para env :

mapfile -d '' envs < /proc/$$/environ
env -i "${envs[@]}" ...

Parece funcionar bem com novas linhas:

$ 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|
...
    
por 15.02.2018 / 10:09