~/.profile é executado quando você efetua login usando o modo do console e não o modo gui. Você pode usar as teclas F1, F2 ... para fazer o login usando o modo de console.
Eu tenho uma conta de usuário guest no meu sistema Debian com o desktop XFCE.
Tem um arquivo ~/.profile adicionado por padrão. As últimas linhas deste
arquivo são:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
echo .profile executed
O último comando echo foi adicionado por mim. Eu assegurei que $HOME/bin existe.
guest@debian:~$ ls -ld $HOME/bin
drwxr-xr-x 2 guest guest 4096 Jan 9 09:42 /home/guest/bin
Após inicializar meu sistema Debian, eu faço login na minha área de trabalho XFCE usando o
guest conta e inicie o Terminal (xfce4-terminal). Mas eu não vejo
qualquer evidência de que ~/.profile foi executado.
guest@debian:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
man bash deixa bem claro que ~/.profile é lido e executado em um shell de login interativo ou em um shell não interativo com a opção --login . ~/.bashrc é executado no shell interativo de não-login, então parece bem que quando o xfce4-terminal inicia o bash, ~/.profile não é executado.
Se ~/.profile não for executado quando lançarmos um novo Terminal, por que
o PATH atualizado em ~/.profile ?
O Debian não deve fornecer o PATH update em ~/.bashrc para que seja
disponível para o usuário quando o usuário inicia um terminal?
~/.profile é executado quando você efetua login usando o modo do console e não o modo gui. Você pode usar as teclas F1, F2 ... para fazer o login usando o modo de console.
Edit -> Profile Preferences -> Title and Command -> "Run command as a login shell"
O usual ~/.profile carrega ~/.bashrc se estiver disponível, se - supondo que $BASH_VERSION esteja presente em seu ambiente.
Tenha em mente que ~/.profile é ignorado se houver ~/.bash_profile ou ~/.bash_login em sua casa e que, como resultado de sua ignorância, ~/.bashrc não é originado também.
Esta resposta foi obtida de aqui ao pesquisar um problema semelhante. E esta resposta da Unix & O Linux menciona como o Debian lida com as configurações da shell com links que podem ajudar.
Meu entendimento sempre foi que .bashrc é específico para bash e .profile é cross-shell. Isso pode não ser um problema para a maioria dos usuários domésticos, mas às vezes estou em um sistema em que os usuários preferem ksh (e impõem essa escolha a novos usuários). Se, por algum motivo, você obtiver uma bournshell, .profile também será usado. Observe que zsh e csh não usam .profile.
De man bash :
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....
When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists....
Eu entendo que
~/.bashrc : para o shell interativo ~/.bash_profile , ~/.bash_login , ~/.profile : para shell de login Portanto, se você precisar modificar PATH no Terminal, que é um shell interativo, convém colocar as configurações de PATH em ~/.bashrc ; ou, como alternativa, você pode obter ~/.profile de ~/.bashrc sempre que estiver em um shell que não seja de login, por exemplo:
shopt -q login_shell || . ~/.profile
Quanto ao motivo por que PATH está definido em ~/.profile como uma forma recomendada , acredito que o PATH definido pelo usuário deve ser definido corretamente quando ele fizer login e "login" puder seja bash , zsh ou GUI, ou algo mais.
Senario 1: Alguns usuários podem querer que o não-X seja o ambiente de trabalho padrão; e X é chamado executando startx normalmente ou automaticamente a partir de ~/.profile quando o terminal virtual de login é tty7 .
[ -z $DISPLAY -a $XDG_VTNR -eq 7 ] && exec startx
Nesse caso, os usuários escolheram cuidadosamente o que definir em ~/.profile , ~/.bashrc e ~/.xinitrc , para que eles tenham o conjunto desejado de variáveis de ambiente --- PATH , EDITOR , VISUAL , BROWSER , etc .--- se ele / ela está trabalhando em:
ssh : ~/.profile + ~/.bashrc
~/.profile + ~/.xinitrc
~/.profile + ~/.xinitrc + ~/.bashrc
Portanto, definir PATH em ~/.profile é a melhor opção. Os usuários podem definir EDITOR como vim em ~/.profile (em não-X), mas alterá-lo para emacs em ~/.xinitrc (em X).
Senário 2: Um usuário da GUI que efetua login em XFCE , em vez disso, efetua login como bash ; então PATH poderia ser definido em ~/.xsessionrc como explicado aqui .
Senário 3: Um usuário zsh pode definir PATH em ~/.zprofile . As configurações interativas para bash são locais em ~/.bashrc e as configurações interativas para zsh são colocadas em ~/.zshrc .