Como vejo uma lista de todas as variáveis de ambiente atualmente definidas em um terminal bash do Linux?

28

Em um terminal bash do Linux, muitas vezes há muitas variáveis de ambiente que foram definidas, como $PATH e $HOME .

É possível ver todas as variáveis de ambiente que foram definidas? Como?

    
por Cory Klein 03.05.2012 / 23:35

3 respostas

21

O comando env sem argumentos imprimirá uma lista das variáveis de ambiente "exportadas" e seus valores. Essas variáveis são visíveis para subprocessos - muitas outras variáveis de ambiente não são mostradas com isso, e usadas apenas dentro do shell em execução, por exemplo, para configuração.

    
por 03.05.2012 / 23:37
25

TL; DR: use (set -o posix ; set)

De acordo com o manual do Bash, você pode usar o set comando interno para mostrar todas as variáveis de ambiente que foram definidas. O comando set também exibirá as definições de quaisquer funções. Se você quiser apenas ver as variáveis, e não as funções, você pode ativar o modo POSIX antes de executar o comando set. A maneira mais fácil de fazer isso é com set -o posix , mas isso deixará o modo POSIX ativado até que você o desligue com set +o posix .

Portanto, o comando a seguir mostrará todas as variáveis de ambiente definidas usando um subshell sem afetar a conformidade POSIX no seu shell atual.

(set -o posix ; set)

@RedGrittyBrick e @iglvzx sugeriram usar o comando env , no entanto, este comando não fornecerá uma listagem completa das variáveis de ambiente. env mostrará apenas as variáveis que foram marcadas para exportação. Compare a saída de env | sort e export -p e você verá o que quero dizer. Você pode executar comm -23 <(set -o posix; set) <(env|sort) se quiser ver quais variáveis de ambiente não estão sendo exportadas.

O motivo da discrepância é que env é um executável separado, em oposição a set , que é um comando interno do shell. De acordo com o manual do Bash, quando é executado um comando que não é um comando ou função interna do shell, ele recebe apenas variáveis de ambiente que foram marcadas para exportação no Bash . Existem muitas variáveis que não são exportadas. Portanto, se você deseja ver todas as variáveis que o seu shell definiu, você deve usar o comando set conforme indicado no manual.

Você pode testar esse comportamento com facilidade usando os seguintes comandos.

MY_TEST_VARIABLE="This is my test variable."
set | grep MY_TEST_VARIABLE
env | grep MY_TEST_VARIABLE

Você verá que set fornece saída, enquanto env não.

    
por 07.09.2013 / 07:18
8
compgen -v

imprime variáveis do shell (mas não os valores).

compgen -e

imprime variáveis exportadas, ou seja, aquelas que são herdadas por processos que este shell inicia (mas não seus valores).

Diferença entre shell e variáveis exportadas: link

    
por 11.12.2013 / 03:05