se você tiver strace
strace -v -e execve cmd
Se os valores das variáveis forem muito longos, você poderá aumentar o tamanho da string com -s
strace -v -s 10000 -e execve cmd
Eu tenho um processo muito curto para o qual eu quero verificar as variáveis ambientais para fins de depuração. O processo é instantâneo de uma perspectiva humana. O exemplo ilustra melhor.
Exemplo
user:~$ ps aux | grep grep
user 2349 0.0 0.0 4384 840 pts/1 S+ 14:47 0:00 grep --color=auto grep
O pid do processo foi 2349. Se eu verificar as variáveis ambientais (ou outras informações):
#Pretty print of environmental variables#
user:~$ xargs --null --max-args=1 echo < /proc/2349/environ
bash: /proc/2349/environ: No such file or directory
A informação desapareceu com o processo.
O que fazer antes de executar o processo para poder listar as variáveis quando o processo estiver concluído?
Gostaria de mover o binário para um lado e criar um wrapper que despeja o ambiente em um arquivo e, em seguida, chama o original.
Por exemplo,
mv ${cmd} ${cmd}.moved
Em seguida, crie um novo arquivo ${cmd}
:
#!/bin/sh
env > /tmp/cmd-env.log
exec ${cmd}.moved "$@"
E não esqueça as permissões:
chmod a+rx ${cmd}
Em seguida, espere que ele seja executado novamente e leia o ambiente em /tmp/cmd-env.log
.
Por fim, coloque o programa original de volta de onde veio:
mv ${cmd}.moved ${cmd}
Naturalmente, pode ser possível evitar mover o binário colocando o wrapper em outro diretório bin
anteriormente em $PATH
.