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

2

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

No entanto, em um sistema Ubuntu eu apenas configurei, executando set dumps 2000 linhas de texto, incluindo muitas funções como esta:

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

Como imprimo somente as variáveis de ambiente?

    
por forthrin 27.02.2013 / 11:14

2 respostas

3

Por padrão, set mostra as variáveis do shell , não apenas as variáveis de ambiente. Em bash funções são consideradas parte das variáveis. Consulte o link .

Se você usar env ou printenv , eles mostrarão o ambiente exportado para processos filhos, o que não é necessariamente igual ao seu bash environment:

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

Os bash declare e typeset builtins podem listar todos os tipos de variáveis, para omitir funções:

declare -F

A saída destes está em uma forma adequada para recriar o estado em um script de shell, portanto é um pouco detalhado, embora você possa distinguir entre matrizes, inteiros e outros tipos (dependendo da versão). Veja também a saída de export -p .

E de link você pode dizer bash para usar o modo POSIX, e set se comporta "corretamente":

( set -o posix ; set ) 

Isso é executado em um subshell, de modo que não altere seu shell em execução e ele pega corretamente as variáveis que ainda não foram exportadas para o ambiente herdado.

    
por 27.02.2013 / 11:51
2

Se você deseja listar todas as variáveis de ambiente, simplesmente digite env .

    
por 27.02.2013 / 11:21

Tags