As coisas simples
PATH=$PATH:~/opt/bin
ou
PATH=~/opt/bin:$PATH
dependendo se você deseja adicionar ~/opt/bin
no final (a ser pesquisado após 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 na encomenda funcionam perfeitamente. Não coloque export
no início da linha, pois ela possui complicações adicionais (veja abaixo em "Notas sobre conchas que não sejam do bash").
Se você PATH
for criado por muitos componentes diferentes, poderá acabar com entradas duplicadas. Consulte Como adicionar o caminho do diretório inicial a ser descoberto pelo Unix, que comando? e Remova entradas duplicadas $ PATH com o comando awk para evitar adicionar duplicatas ou removê-las.
Algumas distribuições automaticamente colocam ~/bin
no seu PATH, se existir, a propósito.
Onde colocá-lo
Coloque a linha de modificar PATH
em ~/.profile
, ou ~/.bash_profile
se é o que você tem.
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 lugar certo para definir variáveis de ambiente como PATH
is ~/.profile
(ou ~/.bash_profile
se você não se importa com shells que não sejam o bash). Consulte Qual é a diferença entre eles e qual devo usar?
Não o coloque /etc/environment
ou ~/.pam_environment
: estes não são arquivos shell, você não pode usar substituições como as que estão $PATH
lá. Nesses arquivos, você pode substituir apenas uma variável, não adicionar a ela.
Possíveis complicações em alguns scripts do sistema
Você não precisa export
se a variável já estiver no ambiente: qualquer alteração no valor da variável é refletida no ambiente.¹ PATH
é praticamente sempre no ambiente; todos os sistemas unix definem isso 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 mais cedo enquanto a criação de algum tipo de ambiente virtual, pode ser necessário para garantir que PATH
não é vazio e exportados: se PATH
ainda não está definido, então algo como PATH=$PATH:/some/directory
iria definir PATH
a :/some/directory
, e o componente vazia no começo significa o diretório atual (como .:/some/directory
).
if [ -z "${PATH-}" ]; then export PATH=/usr/local/bin:/usr/bin:/bin; fi
Notas sobre conchas que não sejam o bash
No bash, ksh e zsh, export
há uma sintaxe especial, e ambos PATH=~/opt/bin:$PATH
e export PATH=~/opt/bin:$PATH
fazem a coisa certa mesmo. Em outros shells no estilo Bourne / POSIX, como o dash (que está /bin/sh
em muitos sistemas), export
é analisado como um comando comum, o que implica duas diferenças:
Assim, em shells como dash, export PATH=~/opt/bin:$PATH
define PATH
a string literal ~/opt/bin/:
seguida pelo valor de PATH
até o primeiro espaço.
PATH=~/opt/bin:$PATH
(uma tarefa simples) não requer aspas e faz a coisa certa. Se você deseja usar export
em um script portátil, precisa 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é o shell Bourne que não aceitou export var=value
e não fez expansão de til).
¹ Isso não era verdade nos reservatórios Bourne (como no reservatório Bourne real, não nos reservatórios modernos do estilo POSIX), mas é altamente improvável que você encontre esses reservatórios antigos hoje em dia.