~/.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
.