O conceito básico para entender aqui é que o PATH pode ser definido em muitos lugares. Como o @demure explica em sua resposta, PATH=$PATH:/new/dir
significa add /new_dir
to $PATH
, ele não limpará o original $PATH
.
Agora, uma razão pela qual há muitos arquivos está intimamente conectada ao conceito de login
e non-login
shells. Veja aqui para um bom resumo. O seguinte é da página man bash (ênfase minha):
When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.
Ao fazer o login pela primeira vez no seu sistema, você inicia um shell login para que o bash leia os arquivos listados acima. A maioria das distribuições define um $PATH
em todo o sistema (que se aplica a todos os usuários) em /etc/profile
e é nesse local que você deve fazer as alterações que deseja aplicar a todos os usuários. Isto é o que eu tenho no meu Debian:
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
Depois de ter logado, quando você abre um terminal, você inicia um shell interativo, sem login . Isso é o que o man bash
tem a dizer sobre isso:
When an interactive shell that is not a login shell
is started, bash reads and executes commands from
/etc/bash.bashrc and ~/.bashrc, if these files exist.
Então, esses arquivos são lidos toda vez que você abre um novo terminal. Seu arquivo $ PATH é a combinação dos valores em todos os arquivos. Em uma situação típica, você efetua login usando um gerenciador de login gráfico e inicia uma nova sessão. Neste ponto seu $PATH
é o que foi definido nos vários arquivos profile
. Se você abrir um terminal, então você está em um shell interativo e os diferentes arquivos bashrc
são lidos, o que pode acrescentar coisas ao $PATH
.
Para resumir, tudo o que você realmente precisa saber é que pode fazer alterações no $PATH
de seu usuário editando $HOME/.profile
.