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) -
$PATHfora de aspas duplas quebras sePATHcontiver 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.