Questão Como listar todos os nomes de variáveis ​​e seus valores atuais?


Como listar todos os nomes de variáveis ​​e seus valores atuais?

Incluindo não só $HOME, $PWD etc, mas qualquer outro que você tenha definido.


295
2018-03-30 00:36


origem


superuser.com/questions/420295/… - Ciro Santilli 新疆改造中心 六四事件 法轮功


Respostas:


Digite o seguinte comando em um terminal para imprimir todas as variáveis ​​de ambiente:

printenv

Para mais informações sobre este comando, leia o printenv página man.


Para mostrar uma lista incluindo as "variáveis ​​shell", você pode inserir o próximo comando:

( set -o posix ; set ) | less

Isto irá mostrar-lhe não somente as variáveis ​​do shell, mas as variáveis ​​de ambiente também.

Para mais informações relacionadas com este tópico, leia:


417
2018-03-30 01:21



Se eu for ao terminal e escrever MYNEWVARIABLE=Ubuntu e executar printenv não aparece aí. Por que isso e como os outros aparecem? - Strapakowsky
Provavelmente você está vendo a diferença entre uma variável de shell e uma variável de ambiente. Experimentar export MYNEWVARIABLE=Ubuntu e funcionará como você espera. - Rmano
se você simplesmente executar set, lista a variável criada por você também. Ou fazer set | grep myvar - Sergiy Kolodyazhnyy
printenv é um comando externo, portanto, só conhece (e imprime) 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. - Dan Pritts
Para expandir a resposta do @Rmano para @Strapakowsky ... Isso não funcionará unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW, mas isso vai unset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEWe isso vai unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW. Usando export diz que "a variável que estou definindo deve fazer parte do ambiente que é passado para os processos, não apenas uma variável neste shell". Meu terceiro exemplo diz que "a variável deve fazer parte do ambiente que é passado para este processo, mas não ficar por perto". - Bruno Bronosky


Eu sei que esta questão é bastante antiga e respondida, mas acho que posso acrescentar um pouco de informação útil.

Em todos os métodos descritos acima, o procedimento sugerido é:

  • lançar um terminal
  • mostra as variáveis ​​de ambiente usando envou printenv como queiras

O problema dessas soluções é que você está vendo as variáveis ​​de ambiente do shell que está correndo para o terminal. Você não está vendo as variáveis ​​de ambiente disponíveis para uma execução de aplicativo, por exemplo, diretamente pela interface gráfica.

Isso é perceptível se, por exemplo, você usar seu ~/.profileou .bashrcou .zshenv (dependendo do seu shell) para modificar as variáveis ​​de ambiente --- como a adição clássica de diretórios para o caminho.

Para ver as variáveis ​​de ambiente disponíveis para o aplicativo iniciado 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):

  • pressione Alt-F2
  • execute o comando xterm -e bash --noprofile --norc

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:

Example of the bare shell

Obviamente, o novo shell terá as variáveis ​​de ambiente adicionadas pelos arquivos do sistema, mas essas variáveis ​​devem estar disponíveis (por herança) para todos os programas no sistema.

Eu estou postando isso porque é a quarta vez que eu tenho que procurar este truque novamente, verificando o meu .pam_environment Arquivo. Então, agora eu vou encontrá-lo mais rápido (e, no processo, espero ajudar outra pessoa ...)


43
2017-10-12 00:37



Requer que você tenha um ambiente de área de trabalho, não é útil para o pessoal somente do CLI do servidor. - K7AAY
Sim, mas para o CLI apenas a resposta anterior está ok. Eu estava apenas apontando que em algum momento você precisa verificar as variáveis ​​de ambiente disponíveis para o aplicativo iniciado pelo ambiente gráfico, que não é o mesmo conjunto que você vê quando inicia um terminal nele. Por exemplo, se você está tentando entender por que seu aplicativo Kile não pode compilar um arquivo LaTeX, enquanto estiver em um terminal, o truque que eu postei aqui ajudará muito. - Rmano
Obrigado por uma resposta muito útil! Acabei de ligar para ele de help.ubuntu.com/community/… - Gunnar Hjalmarsson
Obrigado. Você recomendou xterm -e bash --noprofile --norc porque os arquivos de inicialização não são lidos e executados quando o Ubuntu é iniciado com interface gráfica? Vejo askubuntu.com/q/1025845/1471 - Tim
@Tim basicamente é apenas uma maneira de ter um shell sem nada além das variáveis ​​de ambiente disponíveis para o ambiente gráfico. Um terminal padrão irá ler (ou reler) .bashrc por exemplo... - Rmano


Você pode ver todas as variáveis ​​com o declare construídas em.

declare -p

Se você estiver interessado apenas em variáveis ​​de ambiente, use

declare -xp

Corre help declare para ver quais são as outras opções.


32
2018-04-04 20:28



esta é uma solução muito mais simples do que POSIXLY_CORRECT=1 set e também é digno de nota que declare é alias (nesse contexto) para typesetoutra festa. - w17t


Para listar as variáveis ​​de ambiente no terminal com CTRL+ALT+T você pode usar env comando.

por exemplo :

[raja@localhost ~]$ env
XDG_VTNR=1
SSH_AGENT_PID=3671
XDG_SESSION_ID=3
HOSTNAME=localhost.localdomain
IMSETTINGS_INTEGRATE_DESKTOP=yes
GPG_AGENT_INFO=/home/raja/.gnupg/S.gpg-agent:3691:1
GLADE_PIXMAP_PATH=:
TERM=xterm-256color
SHELL=/bin/bash
XDG_MENU_PREFIX=xfce-
DESKTOP_STARTUP_ID=
HISTSIZE=1000
XDG_SESSION_COOKIE=0250277dd805498381e96c05d88068b0-1364679772.845276-1676152201
WINDOWID=65011716
GNOME_KEYRING_CONTROL=/home/raja/.cache/keyring-N3QoQ2
IMSETTINGS_MODULE=none
QT_GRAPHICSSYSTEM_CHECKED=1
USER=raja

etc.

espero que ajude.


11
2018-03-30 16:41



Eu notei que env perde algumas variáveis ​​o_O. especificamente depois de obter um arquivo VAR = VAL. - ThorSummoner
@ThorSummoner A resposta aqui pode ajudar stackoverflow.com/questions/15474650/… - georaldc


No bash usando compgen:

compgen -v | while read line; do echo $line=${!line};done  

3
2018-04-11 20:53



Esta deve ser a resposta aceita, pois todos os outros listam mais do que apenas o nome em si. No meu caso, algumas variáveis ​​contêm valores de múltiplas linhas, o que torna as outras soluções inviáveis. - Mene


env é um POSIX 7 caminho:

export asdf=qwer
env | grep asdf

Exemplo de saída:

asdf=qwer

Mostra apenas variáveis ​​exportadas: variáveis ​​não exportadas não são geralmente consideradas "variáveis ​​de ambiente".

Prefiro que mais 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-printenv


2
2017-11-30 14:31



Já mencionado há dois anos: askubuntu.com/a/276162/158442 - muru
@muru justo o suficiente. Desejo que tivesse feito env mais visível com melhor formatação e adicionei mais informações. - Ciro Santilli 新疆改造中心 六四事件 法轮功
Isso é o que editando é para. - muru


Se você quiser uma variável de ambiente específica, em vez de imprimi-las todas com printenv, você pode, por exemplo, imprimi-lo fazendo echo "$PWD"


0
2018-01-08 14:13