Quando verifico o ambiente do meu sistema, muitas variáveis ambientais são exibidas. Como posso procurar apenas uma variável específica?
Um livro que estou lendo diz:
Às vezes, o número de variáveis em seu ambiente cresce bastante, tanto que você não deseja ver todos os valores exibidos quando estiver interessado em apenas um. Se for esse o caso, você pode usar o
echo
comando para mostrar o valor atual de uma variável de ambiente.
Como faço isso em um terminal Linux?
command-line
environment-variables
iLearnSlow
fonte
fonte
echo
é uma má escolha de um comando, pois pode transformar o conteúdo da variável. Ele exibirá o conteúdo do parâmetro shell com o mesmo nome. Isso não é necessariamente o mesmo se você estiver usando o shell Bourne ou em ambientes como1
,*
por exemplo. E você não pode usar essa abordagem para envs cujo nome não é válido como um nome de variável do shell.printenv VAR
exibirá todos eles (pelo menos para a implementação GNU).Executando:
printenv
Você verá todas as variáveis de ambiente. Para mais informações, você pode dar uma olhada em:
https://www.digitalocean.com/community/tutorials/how-to-read-and-set-environmental-and-shell-variables-on-a-linux-vps
fonte
printenv
variablename
exibirá apenas a variável nomeada; por exemplo,printenv HOME
fará aproximadamente a mesma coisa queecho "$HOME"
.É importante entender que todo processo tem seu próprio conjunto de variáveis de ambiente.
Quando um processo chama a chamada do
fork()
sistema, é criado um segundo processo (o filho ) idêntico ao primeiro ( o pai ) (esta cópia inclui o ambiente, que reside logo acima da pilha (ou logo abaixo, dependendo de como você pensa nas pilhas:-)
- mas no unix / linux a pilha cresce a partir de endereços altos).Geralmente, o processo filho chama a chamada de
execve()
sistema, que descarta tudo na memória (virtual) e a reconstrói das seções de código e dados no arquivo binário especificado.No entanto, quando reconstrói a pilha, ele copia o ambiente e as seqüências de argumentos passadas para
execve()
a pilha primeiro (nessa ordem), antes de chamar amain()
função (muito do trabalho é feito nocrt0
código de autoinicialização após osexecve()
retornos (para a entrada ponto especificado no binário)).Existem invólucros para a
execve()
chamada do sistema na biblioteca C que passarão pelo ambiente atual (ou seja, uma cópia do ambiente dos pais), em vez de o responsável pela chamada (assim, na verdade, a criança herdará o ambiente dos pais) - vejaenviron(7)
.Tente executar (como root) o comando
ps axeww | less
... isso mostrará o ambiente para todos os processos! Uma interessante é a identificação do processo 1 (ou seja, oinit
processo - o primeiro processo criado pelo kernel no momento da inicialização).Se você deseja examinar o ambiente para um processo específico (e você sabe que é o ID do processo), tente executar o comando
cat /proc/<PID>/environ
(substituindo<PID>
pelo ID do processo).Observe que, se um processo tiver privilégios suficientes, ele pode reescrever sua própria pilha, o que pode dificultar o conhecimento de seu ambiente - você verá alguns processos daemon como esse na saída ps.
Mas, no final, todo esse waffle se resume ao que o @chaos disse acima, se você quiser examinar o valor atual de uma variável de ambiente específica no seu processo de shell, basta usar o comando
echo "$<NAME>"
( builtin) (substituindo<NAME>
pelo nome do variável de ambiente em que você está interessado) ... esteja ciente de que a mesma variável pode ter um valor diferente ou não existir em outro processo.fonte
e
opçãops
e o/proc/…/environ
arquivo especial podem não existir em todos os sistemas. (2) AFAIK, todo processo Unix tem o privilégio de reescrever sua pilha e modificar suas variáveis de ambiente. (3) Para mais discussões, consulte A quem pertencem as variáveis de ambiente? (no superusuário ).ps
... mas agora que você destacou esse ponto, não me lembro por que pensei que.Você pode obter o que procura
export
:Irá mostrar o conteúdo da
$HOME
variável.fonte
se você precisar definir vários vars:
depois de defini-los:
do que exibir o que foi definido:
Dessa forma, você se encontrará em breve, trabalhando com vários conjuntos de shell vars predefinidos em arquivos cnf, que combinados com o tmux, farão com que você seja o mestre do gerenciamento de configurações em ambientes shell:
fonte