Como imprimir todas as variáveis não-ambientais?

0

Como imprimir todas as variáveis não-ambientais?

Estas são todas as variáveis que eu adicionei desde o momento em que o shell começou, como ao fazer:

read abc
    123
# echo ${abc} => 123

Ou

xyz='123'
# echo ${xyz} => 123

Eu quero imprimir todos eles, para saber o que foi adicionado à memória, para que eu possa limpá-lo.

    
por Arcticooling 03.12.2017 / 03:30

1 resposta

2

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).

    
por 03.12.2017 / 05:15

Tags