Por que o PATH é definido em ~ / .profile, embora o lançamento de um Terminal com o bash execute somente ~ / .bashrc?

0

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?

    
por Lone Learner 09.01.2018 / 05:57

4 respostas

0

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

    
por 09.01.2018 / 06:02
0

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.

    
por 13.01.2018 / 13:27
0

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.

    
por 17.01.2018 / 14:27
0

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

  1. ~/.bashrc : para o shell interativo
  2. ~/.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:

  1. Consoles (Ctrl + Alt + F [1-6]) ou o login sem X por meio de ssh : ~/.profile + ~/.bashrc
  2. Progams não terminais em X: ~/.profile + ~/.xinitrc
  3. Emuladores de terminal no X: ~/.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 .

    
por 16.01.2018 / 16:54

Tags