Enquanto um comando está em execução, a maioria dos sistemas permite que você exiba seu ambiente com o comando ps
. Isso não pode ser feito portavelmente, e nem todos os sistemas permitem uma análise confiável, mas se tudo o que você quer é extrair partes “interessantes” do ambiente inicial de uma maneira que funcione em uma variante específica do Unix, isso é fácil. Por exemplo, no Linux e * BSD:
ps eww $$
Como alternativa, no Solaris e no Linux:
cat /proc/$$/environ
Ou no Solaris e AIX:
pargs -e $$
Se você precisar ocultar o conteúdo anterior do ambiente, certifique-se de que todos os processos do shell (incluindo os subshells em segundo plano) tenham saído. Para transmitir dados de uma maneira que não vaze dessa maneira, use um canal em vez de uma variável de ambiente.
exec sh -c 'unset pw; pw=$PASSWORD; unset PASSWORD; printf %s "$pw" | exec theprogram'
Observe que na maioria das variantes Unix (todas modernas), o ambiente de um processo é visível apenas para o mesmo usuário. Somente os argumentos são geralmente visíveis para qualquer usuário executando ps
. Então, tudo bem passar dados confidenciais no ambiente; livrar-se dele é apenas uma questão de endurecimento, não de segurança básica.