Por que configurar o prompt em .bashrc não afetará o prompt?

5

Estou tentando definir meu prompt de shell inserindo a seguinte linha em .bashrc em meu diretório inicial:

export PS1="\[\e[01;36m\][\u]\[\e[0m\] \[\e[01;37m\]\W\[\e[0m\] $ "

Eu salvei este arquivo e reabra o bash, mas isso não muda. Quando eu emito o comando echo $PS1 , o console mostra

\h:\w$

qual é o prompt padrão. Eu olhei em volta de .bashrc e não vi a variável de ambiente PS1 sendo definida em nenhum outro lugar, exceto a linha que inseri mostrada acima.

Isso funciona na minha máquina local, mas com a minha conta em um servidor remoto não vai ficar. Como faço o prompt personalizado entrar em vigor?

Obrigado!

    
por Evan W 10.03.2013 / 23:23

1 resposta

5

O problema aqui é a diferença entre o login e os shells interativos. Veja aqui para um resumo.

~/.bashrc é lido apenas ao iniciar um shell interativo (não-login). Quando você ssh em uma máquina remota, você está executando um shell login , então ~/.bash_profile ou ~/.bash_login ou ~/.profile (nessa ordem) são lidos. Você pode verificar isso executando bash depois de efetuar o logon no servidor remoto, que iniciará um shell interativo, ~/.bashrc será lido e o prompt modificado será exibido.

Para alterar o prompt exibido quando você ssh , defina $PS1 em ~/.bash_profile :

export PS1="\[\e[01;36m\][\u]\[\e[0m\] \[\e[01;37m\]\W\[\e[0m\] $ "

Como alternativa, você pode chamar ~/.bashrc de ~/.bash_profile ou ~/.profile :

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

O if [ "$BASH" ]; then é útil ao usar ~/.profile , já que ele será lido por shells não bash.

    
por 11.03.2013 / 01:22

Tags