
Existe mais de um tipo de variável de ambiente no Linux. Aprenda como vê-los, criá-los para logins locais e remotos e fazer com que sobrevivam a reinicializações.
Índice
Como funcionam as variáveis de ambiente
Quando você abre uma janela de terminal e o shell dentro dela , uma coleção de variáveis é referenciada para garantir que o shell esteja configurado corretamente. Essas variáveis também garantem que todas as informações às quais a janela do terminal e o shell possam se referir estejam disponíveis. Coletivamente, essas variáveis contêm configurações que definem o ambiente que você encontra dentro da janela do terminal, até a aparência do prompt de comando. Então, naturalmente, eles são chamados de variáveis de ambiente.
Algumas variáveis de ambiente são de todo o sistema ou globais. Outros são de toda a sessão e só podem ser vistos por você. Outros não podem fazer referência às variáveis de ambiente de sua sessão. Há um terceiro conjunto de variáveis de ambiente definidas no shell. Sua localidade, fuso horário e configurações de teclado, o conjunto de diretórios pesquisados quando o shell tenta encontrar um comando e seu editor padrão são armazenados em variáveis de ambiente do shell.
Mostraremos como ver as variáveis de ambiente existentes em seu sistema e descreveremos como criar as suas próprias. Também mostraremos como disponibilizá-los para processos filho e ser persistentes durante as reinicializações.
Ambientes e herança
Quando um shell é iniciado, ele passa por uma fase de inicialização. É neste ponto que ele lê as variáveis de ambiente que definem o ambiente do shell.
Quando um programa ou comando é lançado desse shell – conhecido como processo filho – ele herda o ambiente do processo pai – mas cuidado! Como veremos, você pode criar variáveis que não são adicionadas ao seu ambiente, portanto, não serão herdadas por um processo filho.
Se o processo filho for um shell, esse shell será inicializado a partir de seu próprio conjunto de variáveis novo. Portanto, se você alterar o prompt de comando no shell atual e, em seguida, lançar um shell filho, o shell filho não herdará o prompt de comando modificado do pai.
Variáveis de ambiente global
Por convenção, as variáveis de ambiente recebem nomes em letras maiúsculas. Aqui estão algumas das variáveis de ambiente globais e quais são os valores que elas contêm:
- SHELL: O nome do shell que será iniciado quando você abrir uma janela de terminal. Na maioria das distribuições Linux, isso será bash, a menos que você altere o padrão.
- TERM: As janelas de terminal são, na verdade, emulações de um terminal de hardware. Isso contém o tipo de terminal de hardware que será emulado.
- USUÁRIO: O nome de usuário da pessoa atual que usa o sistema.
- PWD: O caminho para o diretório de trabalho atual.
- OLDPWD: O diretório em que você estava antes de mover para o diretório de trabalho atual.
- LS_COLORS: A lista de códigos de cores usados para
lsdestacar os diferentes tipos de arquivo . - CORREIO: Se o
mailsistema foi configurado em seu computador Linux (por padrão, não é), isso manterá o caminho para a caixa de correio do usuário atual . - PATH: Uma lista de diretórios que o shell pesquisará para localizar executáveis de comando.
- LANG: As configurações de idioma, localização e codificação de caracteres.
- HOME: o diretório inicial do usuário atual.
- _: A
_variável de ambiente underscore ( ) contém o último comando que foi digitado.
Podemos ver o que alguns deles estão configurados para usar nada mais sofisticado do que echo, que gravará os valores na janela do terminal . Para ver o valor mantido por uma variável de ambiente, você precisa adicionar um cifrão ( $) ao início de seu nome.
Um toque interessante é que você pode usar o preenchimento de tabulação para preencher o nome da variável de ambiente para você. Digite algumas letras do nome e pressione Tab. O nome da variável é completado pelo shell. Se isso não acontecer, você precisará digitar mais algumas letras para distinguir a variável de ambiente de outros comandos com nomes que começam com essas mesmas letras:
echo $ SHELLecho $ LANG
echo $ HOME
echo $ PWD

Para criar suas próprias variáveis de ambiente globais , adicione-as ao /etc/environmentarquivo. Você precisará usar sudopara editar este arquivo:
sudo gedit / etc / environment

Para adicionar uma variável de ambiente, digite seu nome, um sinal de igual ( =) e o valor que deseja que a variável de ambiente contenha. Não coloque espaço antes ou depois do sinal de igual ( =). O nome da variável de ambiente pode conter letras, um sublinhado ( _) ou números. No entanto, o primeiro caractere de um nome não pode ser um número.
Se houver espaços no valor, certifique-se de colocar todo o valor entre aspas ( ").

Salve o arquivo e, em seguida, efetue logout e login novamente. Use echopara testar se existe uma nova variável e mantém o valor que você definiu:
echo $ WEBSITE

Por ser uma variável de ambiente global e disponível para todos, o usuário marypode fazer referência à variável de ambiente na próxima vez que fizer login:
echo $ WEBSITE

Para ver todas as variáveis de ambiente de uma vez, digite printenv. Há muita saída, então faz sentido canalizá-la sortpara less:
printenv | classificar | Menos

A lista classificada de variáveis de ambiente é exibida para nós em less.

Podemos canalizar a saída greppara procurar variáveis de ambiente relacionadas a um determinado tópico .
printenv | grep GNOME

Variáveis de Ambiente Shell
Essas são algumas das variáveis de ambiente do shell usadas bashpara ditar ou registrar seu comportamento e funcionalidade. Alguns dos valores são atualizados conforme você usa o terminal. Por exemplo, a COLUMNSvariável de ambiente será atualizada para refletir as alterações que você pode fazer na largura da janela do terminal:
- BASHOPTS: As opções de linha de comando que foram usadas quando
bashfoi lançado. - BASH_VERSION: o
bashnúmero da versão como uma sequência de palavras e números. - BASH_VERSINFO: a
bashversão como um dígito. - COLUNAS: A largura atual da janela do terminal.
- DIRSTACK: Os diretórios que foram adicionados à pilha de diretórios pelo
pushdcomando. - HISTFILESIZE: Número máximo de linhas permitidas no
historyarquivo. - HISTSIZE: Número de linhas
historypermitidas na memória. - HOSTNAME: o nome do host do computador.
- IFS: o separador de campo interno usado para separar a entrada na linha de comando. Por padrão, este é um espaço.
- PS1: A
PS1variável de ambiente contém a definição do prompt de comando principal, padrão e. Um conjunto de tokens chamado sequências de escape pode ser incluído na definição de seu prompt de comando. Eles representam coisas como o host e o nome de usuário, o diretório de trabalho atual e a hora. - PS2: Quando um comando se estende por mais de uma linha e mais entradas são esperadas, o prompt de comando secundário é mostrado. A
PS2variável de ambiente contém a definição desse prompt secundário, que, por padrão, é maior que o sinal (>). - SHELLOPTS: opções de shell que você pode definir usando a
setopção. - UID: O identificador de usuário do usuário atual.
Vamos verificar algumas dessas variáveis de shell:
echo $ BASH_VERSION
echo $ HOSTNAME
echo $ COLUMNS
echo $ HISTFILESIZE
echo $ UID

Para fins de integridade, aqui estão os tokens que você pode usar nas definições do prompt de comando:
- \ t: a hora atual, formatada como HH: MM: SS.
- \ d: A data atual, expressa como dia da semana, mês, data.
- \ n: um caractere de nova linha.
- \ s: o nome do seu shell.
- \ W: o nome do seu diretório de trabalho atual.
- \ w: o caminho para o diretório de trabalho atual.
- \ u: o nome de usuário da pessoa que está conectada.
- \ h: o nome do host do computador.
- \ #: Cada comando dentro de um shell é numerado. Isso permite que você veja o número do comando em seu prompt de comando. Este não é o mesmo que o número que o comando terá na
historylista. - \ $: Define o caractere final do prompt como um cifrão (
$) para um usuário normal e um símbolo de hash (#) para o usuário root. Isso funciona verificando o UID do usuário. Se for zero, o usuário é root.
Você encontrará a definição de sua PS1variável de ambiente em seu .bashrcarquivo.
Criação de variáveis de ambiente de sessão
Para criar variáveis de ambiente para seu próprio uso, adicione-as ao final do .bashrcarquivo. Se quiser que as variáveis de ambiente estejam disponíveis para sessões remotas, como conexões SSH, você também precisará adicioná-las ao .bash_profilearquivo.
O formato da definição da variável de ambiente é o mesmo para os dois arquivos. Para adicionar uma definição ao seu .bash_profilearquivo, digite o seguinte no seu diretório inicial:
gedit .bashrc

Adicionamos uma variável de ambiente chamada INHERITED_VAR. Observe a palavra “exportar” no início da linha.

Salve e feche seu arquivo após terminar de editar. Você pode fazer logout e login novamente, ou pode fazer com que o shell releia o .bash_profile arquivo usando o comando dot ( .) como este:
. .bashrc

Agora, vamos criar uma variável de ambiente na linha de comando:
LOCAL_VAR = "Apenas esta sessão"

Se usarmos echo, podemos ver que ambas as variáveis de ambiente são acessíveis para nós:
echo $ LOCAL_VAR
echo $ INHERITED_VAR

Você notará que a definição da INHERITED_VARvariável de ambiente tem a palavra “exportar” no início da linha. Isso significa que a variável de ambiente será herdada por processos filhos do shell atual. Se lançarmos outro usando o bashcomando, podemos verificar as duas variáveis novamente, de dentro do shell filho:
bash
echo $ LOCAL_VAR
echo $ INHERITED_VAR

Como você pode ver, o INHERITED_VARestá acessível no shell filho, mas LOCAL_VARnão está. Simplesmente obtemos uma linha em branco.
Embora “exportar” adicione a parte da variável de ambiente ao ambiente que os processos filhos herdam, INHERITED_VARnão é uma variável de ambiente global. Por exemplo, o usuário marynão pode fazer referência a ele:
echo $ INHERITED_VAR

Para fechar nossa bashsessão infantil , usamos exit:
Saída
Os ambientes herdados também afetam os scripts. Aqui está um script simples que grava os valores de nossas três variáveis de ambiente na janela do terminal:
#! / bin / bash echo "WEBSITE" $ WEBSITE echo "LOCAL_VAR" $ LOCAL_VAR echo "INHERITED_VAR" $ INHERITED_VAR
Isso foi salvo em um arquivo chamado envtest.she, em seguida, tornado executável com o seguinte:
chmod + x envtest.sh
Quando executamos o script, ele pode acessar duas das três variáveis de ambiente:
./envtest.sh

O script pode ver a WEBSITEvariável de ambiente global e a INHERITED_VARvariável de ambiente exportada. Ele não pode acessar LOCAL_VAR, embora o script esteja sendo executado no mesmo shell em que a variável foi criada.
Se precisarmos, podemos exportar uma variável de ambiente da linha de comando. Faremos isso no nosso LOCAL_VARe, em seguida, executaremos o script novamente:
exportar LOCAL_VAR
./envtest.sh

A variável de ambiente foi adicionada ao ambiente do shell atual e, portanto, aparece no ambiente herdado pelo script. O script também pode fazer referência a essa variável de ambiente.
Conexões Remotas
Variáveis de ambiente globais são acessíveis para sessões de login remotas, mas se você deseja que suas variáveis de ambiente definidas localmente estejam disponíveis para você remotamente, você deve adicioná-las ao seu .bash_profilearquivo. Você pode definir a mesma variável de ambiente nos arquivos .bashrce .bash_profile, com valores diferentes. Isso poderia ser captado por um script, digamos, para modificar seu comportamento para pessoas que usam o sistema local ou remotamente.
(Correndo o risco de confundir as coisas, há também um .profilearquivo. Ele também pode conter definições de variáveis de ambiente. No entanto, o .profilearquivo não é lido se o .bash_profilearquivo estiver presente. Portanto, a coisa mais segura a fazer – e da bashmaneira compatível – é para usar o .bash_profilearquivo.)
Para editar o .bash_profilearquivo, usaremos geditnovamente:
gedit .bash_profile

Vamos adicionar a mesma variável de ambiente com o mesmo valor que usamos antes.

Salve suas alterações e feche gedit.
Em outro computador, faremos uma SSH conexão com o computador de teste .
ssh dave@howtogeek.local

Assim que estivermos conectados, executaremos o script mais uma vez:
./envtest.sh

O .bash_profilearquivo foi lido como parte da inicialização do login remoto e a INHERITED_VARvariável de ambiente está acessível para nós e para o script.
Desconfigurando uma Variável de Ambiente
Para remover a definição de uma variável de ambiente, use o unsetcomando . Se removermos a definição da variável de ambiente global WEBSITE, e a variável de ambiente exportada,, INHERITED_VARelas não estarão mais disponíveis na linha de comando, nem em processos filho:
cancelar WEBSITE
não definido INHERITED_VAR
./envtest.sh
echo $ WEBSITE

Um ponto a ser observado é que isso apenas altera a disponibilidade de variáveis de ambiente globais para você nesta sessão. Outra pessoa que efetuou login simultaneamente ainda poderá acessar sua instância dessa variável de ambiente global. Sua instância foi inicializada e lida do /etc/environmentarquivo durante seu processo de login e é independente da cópia de qualquer outra pessoa da variável.
Por exemplo, o usuário maryainda pode acessar a WEBSITEvariável de ambiente e ler seu valor, mesmo que o usuário a davetenha unsetem sua sessão:
echo $ WEBSITE

Controle ambiental
Variáveis de ambiente podem ser usadas para permitir que scripts e aplicativos saibam como devem se comportar. Eles podem ser usados para armazenar configurações ou pequenas quantidades de dados. Por exemplo, um script pode preencher um ambiente com um valor que pode ser referenciado por outros scripts sem precisar gravá-los em um arquivo.