Como mostrar o valor atual de uma variável de ambiente?

16

Quando eu verifico o ambiente do meu sistema, muitas variáveis ambientais aparecerão. Como posso pesquisar por uma variável específica?

Um livro que estou lendo diz:

Sometimes the number of variables in your environment grows quite large, so much so that you don't want to see all of the values displayed when you are interested in just one. If this is the case, you can use the echo command to show an environment variable's current value.

Como faço isso em um terminal Linux?

    
por iLearnSlow 20.11.2015 / 11:08

4 respostas

22

Apenas:

echo "$VARIABLENAME"

Por exemplo, para a variável de ambiente $HOME , use:

echo "$HOME"

Que então imprime algo semelhante a:

/home/username

Editar : de acordo com o comentário de Stéphane Chazelas , pode ser melhor se você usar printenv em vez de echo :

printenv HOME
    
por 20.11.2015 / 11:13
7

Executando:

printenv

Você verá todas as variáveis de ambiente. Para mais informações, você pode dar uma olhada:

link

    
por 20.11.2015 / 11:49
4

É importante entender que todo processo tem seu próprio conjunto de variáveis de ambiente.

Quando um processo chama a chamada de sistema fork() , um segundo processo (o filho ) idêntico ao primeiro ( o pai ) é criado (este copy inclui o ambiente, que reside logo acima da pilha (ou logo abaixo, dependendo de como você pensa em pilhas :-) - mas em unix / linux a pilha cresce para baixo em endereços altos) .

Normalmente, o processo filho chamará a chamada de sistema execve() , que descartará tudo em sua memória (virtual) e reconstruirá a partir das seções de código e dados no arquivo binário especificado .

No entanto, quando reconstrói a pilha, ele copia as seqüências de caracteres do ambiente e do argumento passadas para execve() na pilha primeiro (nessa ordem), antes de chamar a função main() (muito do trabalho é feito no código de bootstrap crt0 após o execve() retorna (para o ponto de entrada especificado no binário)).

Existem invólucros para a chamada de sistema execve() na biblioteca C que passará no ambiente atual (ou seja, uma cópia do ambiente dos pais), em vez de o chamador fornecer (assim, de fato, a criança herdará o ambiente do pai) - veja environ(7) .

Tente executar (como root) o comando ps axeww | less ... isto mostrará o ambiente para os processos all ! Um interessante é o id do processo 1 (ou seja, o init process - o primeiro processo criado pelo kernel no momento da inicialização).

Se você quiser olhar o ambiente para um processo específico (e você sabe qual é o id do processo), tente executar o comando cat /proc/<PID>/environ (substituindo <PID> pelo ID do processo).

Note que se um processo tem privilégios suficientes, ele pode reescrever sua própria pilha, o que pode tornar difícil saber qual é o seu ambiente - você verá alguns processos daemon como este na saída do ps.

Mas no final, todo esse waffle se resume ao que @chaos disse acima, se você quiser ver o valor atual de uma variável de ambiente específica no seu processo shell, apenas use o comando (builtin) echo "$<NAME>" ( substituindo <NAME> pelo nome da variável de ambiente em que você está interessado ... apenas esteja ciente de que a mesma variável pode ter um valor diferente, ou não existir, em outro processo.

    
por 20.11.2015 / 16:40
1

Você pode obter o que procura com export :

export | grep HOME

Irá mostrar o conteúdo da variável $HOME .

    
por 20.11.2015 / 19:54