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? Quão?
environment-variables
Cory Klein
fonte
fonte
Respostas:
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. Oset
comando também exibirá as definições de quaisquer funções. Se você deseja apenas ver as variáveis, e não as funções, é possível ativar o modo POSIX antes de executar o comando set. A maneira mais fácil de fazer isso éset -o posix
, mas isso deixará o modo POSIX ativado até que você o desligueset +o posix
.Portanto, o comando a seguir mostrará todas as variáveis de ambiente definidas usando um subshell sem afetar a conformidade do POSIX em seu shell atual.
@RedGrittyBrick e @iglvzx sugeriram o uso do
env
comando, no entanto, este comando não fornecerá uma lista completa das variáveis de ambiente.env
mostrará apenas as varaibles que foram marcadas para exportação. Compare a saída deenv | sort
eexport -p
e você verá o que quero dizer. Você pode executarcomm -23 <(set -o posix; set) <(env|sort)
se desejar ver quais variáveis de ambiente não estão sendo exportadas.O motivo da discrepância é que
env
é um executável separado, ao contrário doset
qual é um comando interno do shell. De acordo com o manual do Bash, quando um comando é executado 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 definidas pelo seu shell, use oset
comando conforme indicado no manual.Você pode facilmente testar esse comportamento usando os seguintes comandos.
Você verá que
set
fornece saída enquantoenv
não fornece .fonte
O
env
comando sem argumentos imprimirá uma lista das variáveis de ambiente "exportadas" e seus valores. Essas variáveis são tornadas visíveis para os 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.fonte
printenv
, pois ambosenv
eset
têm outras funções do que apenas gerar o ambiente.env
imprimirá apenas uma lista de variáveis de ambiente que foram marcadas para exportação. Não imprimirá todas as variáveis.imprime variáveis de shell (mas não os valores).
imprime variáveis exportadas, ou seja, aquelas que são herdadas pelos processos que esse shell inicia (mas não seus valores).
Diferença entre shell e variáveis exportadas: https://unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b?rq=1
fonte
compgen -e
é exatamente o que eu queria!