As coisas simples
PATH=$PATH:~/opt/bin
ou
PATH=~/opt/bin:$PATH
dependendo se você deseja adicionar ~/opt/binno 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/binou variações na encomenda funcionam perfeitamente. Não coloque exportno início da linha, pois ela possui complicações adicionais (veja abaixo em "Notas sobre conchas que não sejam do bash").
Se você PATHfor 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 ~/binno seu PATH, se existir, a propósito.
Onde colocá-lo
Coloque a linha de modificar PATHem ~/.profile, ou ~/.bash_profilese é o que você tem.
Observe que ~/.bash_rcnã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 PATHis ~/.profile(ou ~/.bash_profilese 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/environmentou ~/.pam_environment: estes não são arquivos shell, você não pode usar substituições como as que estão $PATHlá. 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 exportse 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 PATHjá 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 PATHnão é vazio e exportados: se PATHainda não está definido, então algo como PATH=$PATH:/some/directoryiria definir PATHa :/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, exporthá uma sintaxe especial, e ambos PATH=~/opt/bin:$PATHe export PATH=~/opt/bin:$PATHfazem a coisa certa mesmo. Em outros shells no estilo Bourne / POSIX, como o dash (que está /bin/shem muitos sistemas), exporté analisado como um comando comum, o que implica duas diferenças:
Assim, em shells como dash, export PATH=~/opt/bin:$PATHdefine PATHa string literal ~/opt/bin/:seguida pelo valor de PATHaté o primeiro espaço.
PATH=~/opt/bin:$PATH(uma tarefa simples) não requer aspas e faz a coisa certa. Se você deseja usar exportem 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 PATHpara portabilidade, até o shell Bourne que não aceitou export var=valuee 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.