O material simples
PATH=$PATH:~/opt/bin
PATH=~/opt/bin:$PATH
dependendo se você deseja adicionar ~/opt/bin
no final (a ser pesquisado depois de todos os outros diretórios, caso haja um programa com o mesmo nome em vários diretórios) ou no início (a ser pesquisado antes de todos os outros diretórios).
Você pode adicionar várias entradas ao mesmo tempo. PATH=$PATH:~/opt/bin:~/opt/node/bin
ou variações sobre o trabalho de encomenda muito bem. Não coloque export
no início da linha, pois tem complicações adicionais (veja abaixo em "Nots on shells other than bash").
Se o seu PATH
for construído por muitos componentes diferentes, você poderá acabar com entradas duplicadas. Veja Como adicionar caminho do diretório inicial a ser descoberto pelo Unix que comando? e Remova entradas duplicadas de $ PATH com o comando awk para evitar adicionar duplicatas ou removê-las.
Algumas distribuições colocam automaticamente ~/bin
em seu PATH, se existir, a propósito.
Onde colocar
Observe que ~/.bash_rc
não é lido por nenhum programa e ~/.bashrc
é o arquivo de configuração de instâncias interativas do bash. Você não deve definir variáveis de ambiente em ~/.bashrc
. O local certo para definir variáveis de ambiente como PATH
é ~/.profile
(ou ~/.bash_profile
se você não se importa com shells além de bash). Consulte Qual é a diferença entre eles e qual deles devo usar?
Não coloque isso em /etc/environment
ou ~/.pam_environment
: estes não são arquivos shell, você não pode usar substituições como $PATH
lá. Nesses arquivos, você só pode substituir uma variável e não adicioná-la a ela.
Potenciais complicações em alguns scripts do sistema
Você não precisa de export
se a variável já estiver no ambiente: qualquer alteração do valor da variável é refletida no ambiente.¹ PATH
é praticamente sempre no ambiente; todos os sistemas unix o definem muito cedo (geralmente no primeiro processo, de fato).
No momento do login, você pode confiar em PATH
já estar no ambiente e já conter alguns diretórios do sistema. Se você estiver escrevendo um script que pode ser executado no início enquanto configura algum tipo de ambiente virtual, talvez seja necessário garantir que PATH
não esteja vazio e seja exportado: se PATH
ainda não estiver definido, algo como PATH=$PATH:/some/directory
definiria PATH
para :/some/directory
e o componente vazio no início significa o diretório atual (como .:/some/directory
).
if [ -z "${PATH-}" ]; then export PATH=/usr/local/bin:/usr/bin:/bin; fi
Notas sobre shells que não sejam bash
No bash, ksh e zsh, export
é uma sintaxe especial, e os dois PATH=~/opt/bin:$PATH
e export PATH=~/opt/bin:$PATH
fazem a coisa certa mesmo. Em outras shells do tipo Bourne / POSIX, como dash (que é /bin/sh
em muitos sistemas), export
é analisado como um comando comum, o que implica duas diferenças:
-
~
é analisado apenas no início de uma palavra, exceto em atribuições (consulte Como adicionar o caminho do diretório home a ser descoberto pelo Unix qual comando? para detalhes) -
$PATH
fora de aspas duplas quebras sePATH
contiver espaço em branco ou\[*?
.
Em shells como dash, define export PATH=~/opt/bin:$PATH
PATH
para a string literal ~/opt/bin/:
seguida do valor de PATH
para o primeiro espaço.
PATH=~/opt/bin:$PATH
(uma tarefa nua) não requer cotações e faz a coisa certa. Se você quiser usar export
em um script portátil, precisará escrever export PATH="$HOME/opt/bin:$PATH"
ou PATH=~/opt/bin:$PATH; export PATH
(ou PATH=$HOME/opt/bin:$PATH; export PATH
para portabilidade até mesmo para o shell Bourne que não aceitou export var=value
e não fez expansão do til).
¹ Isso não era verdade em shells Bourne (como no shell Bourne real, não em shells modernos no estilo POSIX), mas é altamente improvável que você encontre shells antigos nos dias de hoje.