Se você estiver usando o Bash, este comando listará os nomes de todas as variáveis do shell que não são herdadas por um processo filho e não fazem parte do slate padrão:
diff -U 1 <(set -o posix ; set |cut -d= -f1) <(exec bash -ic 'set -o posix ; set' | cut -d= -f1)|grep '^[-][^-]'|cut -d- -f2|grep -vE '^(COLUMNS|HISTFILESIZE|HISTSIZE|LINES|PIPESTATUS)$'
Isso produz uma lista de todos os nomes de variáveis no shell atual (com set
), e uma lista de todos os nomes de variáveis em um subprocesso recém-criado executando o mesmo shell, localiza todos os presentes na primeira lista e não no segundo (com diff
, o último corte e o primeiro grep), e reduz algumas variáveis padrão específicas do Bash que o subprocesso não terá, porque não é um shell voltado para o usuário. set -o posix
torna set
listar apenas as variáveis e não as funções.
Ele omitirá ambas variáveis de ambiente herdadas e variáveis que você marcou explicitamente para exportação.
Troque bash
do seu shell. Você também precisará alterar a lista de variáveis ignoradas no último grep
e provavelmente poderá perder set -o posix
. Se o seu shell não tiver substituição de processo , você precisará usar arquivos temporários em vez disso, ou acesso específico da plataforma aos descritores de arquivos (como /dev/fd
).
Por outro lado, se tudo o que você quer fazer é limpar suas próprias variáveis e funções locais, então
exec bash
terá esse efeito (além de reler alguns arquivos de configuração e potencialmente perder alterações locais nas opções do shell).