Usando env para imprimir e definir suas variáveis ​​de ambiente

De vez em quando, preciso saber o valor de uma variável de ambiente UNIX específica
. Claro, isso é fácil de fazer se você souber a grafia exata da
variável, como no caso do diretório de trabalho atual:

 echo $PWD
/Users/chip/code/chip.github.com

No entanto, e se eu não tiver certeza da grafia ou simplesmente quiser ver todas as
variáveis ​​definidas para meu ambiente atual? Isso também é fácil de encontrar
, usando o envcomando (a saída abaixo é limitada para facilitar a leitura) :

 env 
ARCHFLAGS
=-arch x86_64
Apple_PubSub_Socket_Render=/tmp/launch-gANhjR/Render
Apple_Ubiquity_Message=/tmp/launch-yn5YIm/Apple_Ubiquity_Message
CLICOLOR
=1
COMMAND_MODE
=unix2003
DISPLAY
=/tmp/launch-okscQD/org.macosforge.xquartz:0
EDITOR
=/usr/bin/vim -f
.
.
.

Isso é muito eficaz e, como as variáveis ​​de ambiente são classificadas, torna
mais fácil encontrar uma configuração específica.

Mas, env , pode fazer mais! Ele também pode definir o ambiente para você para
utilitários específicos . Vejamos alguns exemplos de código Ruby para demonstrar este exemplo:

 cat env.rb
#!/usr/bin/env ruby

puts ENV
['PWD']

Aqui você pode ver que este pequeno script simplesmente imprime o conteúdo da PWD
variável de ambiente em STDOUT.

Para fins de sanidade, vamos verificar a configuração atual dessa variável apenas para ver
se ela corresponde às nossas expectativas:

 echo $PWD
/Users/chip/code/chip.github.com

Isso era o que eu esperava. Então, digamos que eu queira que este script use outra
configuração para essa variável de ambiente. Vou tentar defini-lo antes de chamar
o script:

 env PWD=/tmp ./env.rb
/Users/chip/code/chip.github.com

Mas espere! Isso não fez nada. Isso porque o envherda comando
o ambiente atual por padrão, o que, como vimos antes tinha um valor diferente
do que o que passou: ./tmp

A maneira de contornar isso é passar a bandeira para , assim:-ienv

 env -i PWD=/tmp ./env.rb
/tmp

Agora ele usa a variável conforme o esperado. Lembre-se de que ele não configurou esta
variável permanentemente
, mas sim apenas para a execução do utilitário que a
passamos, que neste caso era o script.env.rb

Para provar isso, vamos dar uma olhada na PWDvariável mais uma vez:

 echo $PWD
/Users/chip/code/chip.github.com

Com base nas informações acima, se você precisar revisar seu
ambiente atual ou configurá-lo para uma única execução de um utilitário, é fácil de fazer
usando o envcomando.

Para obter mais dicas sobre UNIX, consulte Learning the UNIX Command Line .