Environment variables (Português)

Este artigo ou esta seção precisa de
tradução
.
Notas:
The
~/.pam_environment
file is no longer read, this page should be updated to reflect it, since it is a relatively common setup. (Discuta em
Talk:Environment variables (Português)#
)
Status de tradução:
Esse artigo é uma tradução de
Environment variables
. Data da última tradução: 2020-07-06. Você pode ajudar a sincronizar a tradução, se houver
alterações
na versão em inglês.
Artigos relacionados
Aplicativos padrão
Uma variável de ambiente é um objeto nomeado que contém dados usados por um ou mais aplicativos. Em termos simples, é uma variável com um nome e um valor. O valor de uma variável ambiental pode, por exemplo, ser a localização de todos os arquivos executáveis no sistema de arquivos, o editor padrão que deve ser usado ou as configurações de localidade do sistema. Os usuários novos no Linux geralmente podem encontrar essa maneira de gerenciar as configurações um pouco incontrolável. No entanto, as variáveis de ambiente fornecem uma maneira simples de compartilhar configurações entre vários aplicativos e processos no Linux.
Utilitários
O pacote
coreutils
contém os programas
printenv
e
env
. Para listar as variáveis de ambiente atuais com valores:
$ printenv
Nota
Algumas variáveis de ambiente são específicas do usuário. Verifique comparando as saídas de
printenv
como um usuários comum e como
root
.
O utilitário
env
pode ser usado para executar um comando sob um ambiente modificado. O seguinte exemplo vai iniciar
xterm
com a variável de ambiente
EDITOR
definida para
vim
. Isso não afetará a variável de ambiente global
EDITOR
.
$ env EDITOR=vim xterm
O comando
set
, embutido no
Bash
, permite alterar as variáveis de opções shell e definir os parâmetros posicionais, ou para exibir os nomes das variáveis de shell. Para mais informações, veja
a documentação do
set
.
Cada processo armazena seu ambiente no arquivo
/proc/$PID/environ
. Esse arquivo contém um par de chave-valor delimitado por um caractere nulo (
\x0
). Um formato mais legível para humanos pode ser obtido com o
sed
, p.ex.
sed 's:\x0:\n:g' /proc/$PID/environ
.
Definindo variáveis
Globalmente
A maioria das distribuições do Linux diz-lhe para alterar ou adicionar definições de variáveis de ambiente em
/etc/profile
ou em outros locais. Tenha em mente que também existem arquivos de configuração específicos do pacote contendo configurações de variáveis, como
/etc/locale.conf
. Certifique-se de manter e gerenciar as variáveis de ambiente e prestar atenção aos inúmeros arquivos que podem conter variáveis de ambiente. Em princípio, qualquer script shell pode ser usado para inicializar variáveis ambientais, mas seguindo as convenções UNIX tradicionais, essas declarações devem estar presentes apenas em determinados arquivos.
Os seguintes arquivos devem ser usados para definir variáveis de ambiente globais em seu sistema:
/etc/environment
,
/etc/profile
e arquivos de configuração específicos do shell. Cada um desses arquivos tem diferentes limitações, então você deve selecionar cuidadosamente o apropriado para seus propósitos.
/etc/environment
é usado pelo módulo pam_env e é agnóstico do shell, portanto script ou expansão glob não podem ser usados. O arquivo aceita apenas pares
variável=valor
. Veja
pam_env(8)
e
pam_env.conf(5)
para detalhes.
Arquivos de configuração globais de seu
shell
, inicializa variáveis e executa scripts. Por exemplo,
Bash#Configuration files
ou
Zsh#Startup/Shutdown files
.
/etc/profile
inicializa variáveis para shells de login
apenas
. Ele, porém, executa scripts e pode ser usado por todos os shells compatíveis com
Bourne shell
.
Neste exemplo, adicionamos o diretório
~/bin
ao
PATH
para o respectivo usuário. Para fazer isso, basta colocar isso em seu arquivo de configuração global de variável de ambiente (
/etc/profile
ou
/etc/bash.bashrc
):
# Se o ID do usuário for maior ou igual a 1000 & se ~/bin existir e é um diretório e se ~/bin ainda não estiver no seu $PATH
# então exporta ~/bin para seu $PATH.
if [[ $UID -ge 1000 && -d $HOME/bin && -z $(echo $PATH | grep -o $HOME/bin) ]]
then
    export PATH="${PATH}:$HOME/bin"
fi
Por usuário
Nota
O daemon dbus e a instância de usuário do systemd não herdam quaisquer variáveis de ambiente definidas em lugares como
~/.bashrc
etc. Isso significa que, por exemplo, programas ativados por dbus, como o GNOME Files não vão usá-las por padrão. Veja
Systemd/User#Environment variables
.
Nem sempre você deseja definir uma variável de ambiente globalmente. Por exemplo, você pode querer adicionar
/home/meu_usuário/bin
à variável
PATH
, mas não deseja que todos os outros usuários em seu sistema tenham isso em seus
PATH
também. Variáveis de ambiente locais pode ser definidos em muitos arquivos diferentes:
~/.pam_environment
é o equivalente específico de usuário de
/etc/security/pam_env.conf
[1]
, usado pelo módulo pam_env. Veja
pam_env(8)
e
pam_env.conf(5)
para detalhes.
Arquivos de configuração de usuário de seu
shell
, por exemplo
Bash#Configuration files
ou
Zsh#Startup/Shutdown files
.
systemd
vai carregar variáveis de ambiente de
~/.config/environment.d/*.conf
veja
environment.d(5)
e
https://wiki.gnome.org/Initiatives/Wayland/SessionStart
.
Para adicionar um diretório para o
PATH
para uso local, coloque o seguinte em
~/.bash_profile
:
export PATH="${PATH}:/home/meu_usuário/bin"
Para atualizar a variável, autentique-se novamente ou use
source
para
carregar
novamente o arquivo:
$ source ~/.bash_profile
.
Ambiente gráfico
Variáveis de ambiente para aplicativos do
Xorg
podem ser definidos em
xinitrc
, ou em
xprofile
ao usar um
gerenciador de exibição
, por exemplo:
~/.xinitrc
export PATH="${PATH}:${HOME}/scripts"
export GUIVAR=value
Aplicativos que usam
Wayland
pode usar
variáveis de ambiente de usuário systemd
, pois o Wayland não inicia qualquer arquivo relacionado ao Xorg:
~/.config/environment.d/envvars.conf
PATH=$PATH:${HOME}/scripts
GUIVAR=value
Para definir variáveis de ambiente apenas para um aplicativo específico em vez de toda a sessão, edite o arquivo
.desktop
do aplicativo. Veja
Desktop entries#Modify environment variables
para instruções.
Dica
KDE Plasma
possui suporte a execução de shell scripts no login e mesmo após iniciar o Plasma, eles podem ser usados para definir variáveis de ambiente. Veja
KDE (Português)#Inicialização automática
.
Por sessão
Às vezes, são necessárias definições ainda mais rigorosas. Pode-se querer executar temporariamente executáveis a partir de um diretório específico criado sem ter que digitar o caminho absoluto para cada um, ou editar arquivos de configuração do shell pelo curto período de tempo necessário para executá-los.
Nesse caso, você pode definir a variável
PATH
em sua sessão atual, combinada com o comando
export
. Enquanto você não terminar, a variável
PATH
usará as configurações temporárias. Para adicionar um diretório específico da sessão para
PATH
, emita:
$ export PATH="${PATH}:/home/meu_usuário/tmp/usr/bin"
Exemplos
A seção a seguir lista uma série de variáveis de ambiente comuns usadas por um sistema Linux e descreve seus valores.
DE
indica o ambiente desktop (
D
esktop
E
nvironment) sendo usado.
xdg-open
vai usá-la para escolher um aplicativo seletor de arquivo mais amigável para o usuário que o ambiente desktop fornece. Alguns pacotes precisam ser instalados para usar esse recurso. Para o
GNOME
, que seria o
libgnome
AUR
; para o
Xfce
esse seria o
exo
. Valores reconhecidos da variável
DE
são:
gnome
,
kde
,
xfce
,
lxde
e
mate
.
A variável de ambiente
DE
precisa ser exportada antes de iniciar o gerenciador de janela. Por exemplo:
~/.xinitrc
export DE="xfce"
exec openbox
Isso fará com que
xdg-open
use o mais amigável
exo-open
, porque ele presume que está executando dentro do Xfce. Use
exo-preferred-applications
para configurar.
DESKTOP_SESSION
é similar ao
DE
, mas usado no ambiente desktop
LXDE
: quando
DESKTOP_SESSION
é definido para
LXDE
,
xdg-open
vai usar associações de arquivos do
pcmanfm
.
PATH
contém uma lista, separada por caractere de dois pontos, de diretórios nos quais seu sistema procura por arquivos executáveis. Quando um comando comum (p.ex.:
ls
,
systemctl
ou
pacman
) é interpretado pelo shell (p.ex.,
bash
ou
zsh
), o shell procura por um arquivo executável com o mesmo nome que seu comando nos diretórios listados, e o executa. Para executar os executáveis que não estão listados no
PATH
, um caminho relativo ou absoluto para o executável deve ser dado, como, por exemplo,
./a.out
ou
/bin/ls
.
Nota
É aconselhável não incluir o diretório de trabalho atual (
.
) no seu
PATH
por motivos de segurança, pois pode enganar o usuário para executar comandos maliciosos.
HOME
contém o caminho para o diretório inicial do usuário atual. Esta variável pode ser usada por aplicativos para associar arquivos de configuração e tal como com o usuário que está executando-o.
PWD
contém o caminho para o seu diretório de trabalho.
OLDPWD
contém o caminho de seu diretório de trabalho anterior, isto é, o valor de
PWD
antes do último
cd
ser executado.
TERM
contém o tipo de terminal em execução, como
xterm-256color
. Ele é usado por programas em execução no terminal que desejem usam capacidades específicas do terminal.
MAIL
contém a localização de e-mails de entrada. A configuração tradicional é
/var/spool/mail/$LOGNAME
.
ftp_proxy
e
http_proxy
contêm o servidor de proxy FTP e HTTP, respectivamente:
ftp_proxy="ftp://192.168.0.1:21"
http_proxy="http://192.168.0.1:80"
MANPATH
contém uma lista, separada por caractere de dois pontos, de diretório nos quais o
man
pesquisa por páginas man.
Nota
No
/etc/profile
, há um comentário que afirma "Man é muito melhor que nós para descobrir isso", então essa variável geralmente deve ser deixada não definido. Veja
manpath(5)
.
INFODIR
contém uma lista, separada por caracteres de dois pontos, de diretórios nos quais o comando
info
pesquisa por páginas info, p.ex.:
/usr/share/info:/usr/local/share/info
TZ
pode ser usado para definir um fuso horário diferente como o do usuário. Os fusos listados em
/usr/share/zoneinfo/
podem ser usados como referências, por exemplo
TZ=":/usr/share/zoneinfo/Pacific/Fiji"
. Ao apontar a variável
TZ
para um arquivo de
zoneinfo
, deve-se iniciar com um caractere de dois pontos, conforme
o manual do GNU
.
Programas padrão
SHELL
contém o caminho para o
shell preferido
do usuário. Note que isso não é necessariamente o shell que está sendo usado no momento, apesar do
Bash
definir essa variável na inicialização.
PAGER
contém o comando para executar o programa de listagem de conteúdo dos arquivos, p.ex.
/bin/less
.
EDITOR
contém o comando para executar o programa leve usado para edição de arquivos, p.ex.
/usr/bin/nano
. Por exemplo, você pode escrever uma opção interativa entre o
gedit
sob
X
ou
nano
, neste exemplo:
export EDITOR="$(if [[ -n $DISPLAY ]]; then echo 'gedit'; else echo 'nano'; fi)"
VISUAL
contém o comando para executar o editor de pleno direito que é usado para tarefas mais exigentes, como a edição de mensagens de correio (p.ex.,
vi
,
vim
,
emacs
etc).
BROWSER
contém o caminho para o navegador web. Útil para configurar um arquivo de configuração de shell interativo para que ele possa ser alterado dinamicamente dependendo da disponibilidade de um ambiente gráfico, como o
X
:
if [ -n "$DISPLAY" ]; then
    export BROWSER=firefox
else 
    export BROWSER=links
fi
Usando pam_env
O módulo
PAM
pam_env(8)
carrega as variáveis a serem definidas no ambiente dos seguintes arquivos:
/etc/security/pam_env.conf
,
/etc/environment
e
~/.pam_environment
.
/etc/environment
deve consistir de pares
VARIÁVEL
=
valor
simples em linhas separadas, por exemplo:
EDITOR=nano
/etc/security/pam_env.conf
e
~/.pam_environment
compartilham o mesmo formato a seguir:
VARIÁVEL [DEFAULT=
valor
] [OVERRIDE=
valor
]
@{HOME}
e
@{SHELL}
são variáveis especiais que expandem para o que está definido no
/etc/passwd
. O exemplo a seguir ilustra como expandir a variável de ambiente
HOME
em outra variável:
XDG_CONFIG_HOME   DEFAULT=@{HOME}/.config
Nota
As variáveis
${HOME}
e
${SHELL}
não são vinculadas as variáveis de ambiente
HOME
e
SHELL
, elas não estão definidas por padrão.
O formato também permite expandir variáveis definidas nos valores de outras variáveis usando
${
VARIÁVEL
}
, tipo isso:
GNUPGHOME        DEFAULT=${XDG_CONFIG_HOME}/gnupg
Pares
VARIÁVEL
=
valor
também são permitidos, mas não há suporte a expansão de variável naqueles pares. Veja
pam_env.conf(5)
para mais informações.
Nota
Esses arquivos são lidos antes de outros arquivos, em especial antes de
~/.profile
,
~/.bash_profile
e
~/.zshenv
.
Veja também
Documentação do Gentoo Linux
Ubuntu Community Wiki - Variáveis de ambiente