Como listar todos os nomes de variáveis e seus valores atuais?
Incluindo não apenas etc $HOME
, $PWD
mas qualquer outro que você definiu.
command-line
bash
environment-variables
Strapakowsky
fonte
fonte
Respostas:
Para o bash: (o shell padrão no Ubuntu)
Digite o seguinte comando em um terminal para imprimir todas as variáveis de ambiente:
Para mais informações sobre este comando, leia a
printenv
página de manual .Para mostrar uma lista incluindo as "variáveis de shell", você pode inserir o próximo comando:
Isso mostrará não apenas as variáveis do shell, mas também as variáveis de ambiente.
Para obter mais informações relacionadas a este tópico, leia:
Para zsh: (um shell avançado)
Use o seguinte comando:
Para obter mais informações sobre as opções do ZSH, consulte a
zshoptions
página de manual .fonte
MYNEWVARIABLE=Ubuntu
e executar,printenv
ele não aparecerá lá. Por que isso e como os outros aparecem?export MYNEWVARIABLE=Ubuntu
e funcionará conforme o esperado.set
, ele lista a variável criada por você também. Ou façaset | grep myvar
printenv
é um comando externo; portanto, ele conhece apenas (e imprime) as variáveis de ambiente exportadas.set
é um comando bash interno, portanto, mostra todas as "variáveis de shell" (variáveis de ambiente não exportadas), bem como as variáveis de ambiente exportadas.unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW
, mas funcionaráunset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW
e funcionaráunset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW
. O uso da exportação diz que "a variável que estou configurando deve fazer parte do ambiente que é passado aos processos, não apenas uma variável nesse shell". Meu terceiro exemplo diz que "a variável deve fazer parte do ambiente que é passado para ESTE processo, mas não permanecer depois".Eu sei que esta pergunta é bastante antiga e respondeu, mas acho que posso adicionar um pouco de informação útil.
Em todos os métodos descritos acima, o procedimento sugerido é:
env
, ouprintenv
ou qualquer outra coisaO problema dessas soluções é que você está vendo as variáveis de ambiente do shell que está sendo executado no terminal . Você não está vendo as variáveis de ambiente disponíveis para um aplicativo, por exemplo, diretamente pela interface gráfica.
Isso é perceptível se, por exemplo, você usar seu
~/.profile
, ou.bashrc
, ou.zshenv
(dependendo do seu shell) para modificar as variáveis de ambiente - como a adição clássica de diretórios ao caminho.Para ver as variáveis de ambiente disponíveis para o aplicativo iniciadas diretamente no ambiente gráfico, você pode fazer o seguinte (no Gnome Shell, tenho certeza de que existe um método equivalente em todos os outros DE):
xterm -e bash --noprofile --norc
(Ou, se você não tiver
xterm
,gnome-terminal -- bash --noprofile --norc
--- obrigado a Mike Nakis pelo comentário).Agora você tem um terminal com um shell que não adicionou nenhuma variável de ambiente. Você pode usar
env
aqui para listar todas as suas variáveis de ambiente:Obviamente, o novo shell terá as variáveis de ambiente adicionadas pelos arquivos do sistema, mas essas variáveis deverão estar disponíveis (por herança) para todos os programas do sistema.
Estou postando isso porque é a quarta vez que tenho que pesquisar esse truque novamente, verificando meu
.pam_environment
arquivo. Então agora vou encontrá-lo mais rápido (e, no processo, espero ajudar outra pessoa ...)fonte
xterm -e bash --noprofile --norc
porque os arquivos de inicialização não são lidos e executados quando o Ubuntu é iniciado com a interface gráfica? Veja askubuntu.com/q/1025845/1471gnome-terminal -- bash --noprofile --norc
Você pode ver todas as variáveis com o
declare
builtin.Se você estiver interessado apenas em variáveis de ambiente, use
Corra
help declare
para ver quais são as outras opções.fonte
POSIXLY_CORRECT=1 set
e também é digno de menção quedeclare
éalias
(nesse contexto) paratypeset
, outro bash embutido.Para listar as variáveis de ambiente no terminal com CTRL+ ALT+, Tvocê pode usar o
env
comandopor exemplo :
etc.
espero que ajude.
fonte
No bash usando compgen:
fonte
compgen -v | while read line; do declare -p $line; done
A maioria das soluções aqui imprime apenas variáveis de ambiente ou tem a desvantagem de que env ou (set -o posix; posix) não imprimem valores na forma analisável (tente imprimir a variável A = $ 'a \ r \ nb' ...) .
Aqui está uma função que imprimirá todas as variáveis, uma variável por linha, no formulário de escape POSIX:
Obrigado a @tmgoblin por apontar o uso do compgen -v.
fonte
env é uma maneira POSIX 7 :
Saída de amostra:
Ele mostra apenas variáveis exportadas: variáveis não exportadas geralmente não são consideradas "variáveis de ambiente".
Prefira que over
printenv
, que não é POSIX. Ambos parecem fazer a mesma coisa sem argumentos: https://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenvfonte
env
mais visível com melhor formatação e adicionei mais informações.Se você deseja uma variável de ambiente específica, em vez de imprimi-las todas
printenv
, pode, por exemplo, imprimi-la fazendoecho "$PWD"
fonte
O printenv lista apenas variáveis exportadas, command+ alt+ $ ("\ e $": variável completa) lista todas as variáveis.
fonte