Como fazer com que o comando “set” do UNIX imprima apenas variáveis ​​de ambiente

Como fazer com que o comando “set” do UNIX imprima apenas variáveis ​​de ambiente

Estou acostumado com o setcomando bash listando apenas uma lista das configurações do ambiente, por exemplo. PATH e tal.

No entanto, em um sistema Ubuntu que acabei de configurar, executando setdumps de 2.000 linhas de texto, incluindo muitas funções como esta:

dequote () 
{ 
    eval printf %s "$1" 2> /dev/null
}

Como imprimo apenas as variáveis ​​de ambiente?

Responder1

Por padrão setmostra ovariáveis ​​de shell, não apenas as variáveis ​​de ambiente. Nas bashfunções são consideradas parte das variáveis. Verhttps://askubuntu.com/questions/26318/environment-variable-vs-shell-variable-whats-the-difference.

Se você usar envou printenveles vão mostrar oambienteexportado para processos filhos, o que não énecessariamenteo mesmo que o seu bashambiente:

$ foo=1
$ printenv foo
$ export foo
$ printenv foo
1

O bash declaree typesetos builtins podem listar todos os tipos de variáveis, para omitir funções:

declare -F

A saída deles está em um formato adequado para recriar o estado em um script de shell, por isso é um pouco detalhado, embora você possa distinguir entre matrizes, números inteiros e outros tipos (dependendo da versão). Veja também a saída de export -p.

E dehttps://stackoverflow.com/questions/1305237/how-to-list-variables-declared-in-script-in-bash você pode dizer ao bash para usar o modo POSIX e setse comportar "corretamente":

( set -o posix ; set ) 

Isso é executado em um subshell para não alterar o shell em execução e seleciona corretamente as variáveis ​​​​ainda não exportadas para o ambiente herdado.

Responder2

Se você quiser listar todas as variáveis ​​de ambiente, basta digitar env.

informação relacionada