Existe um arquivo Bash que será sempre originado no modo interativo, não importa se é login ou não-login?

9

Até onde eu sei, os shells interativos podem ser login ou não login, e os arquivos de inicialização para eles são diferentes.

  • Se interativo + shell de login → /etc/profile , o primeiro legível de ~/.bash_profile , ~/.bash_login e ~/.profile
  • Se o shell interativo + não de login → /etc/bash.bashrc then ~/.bashrc

Eu quero definir algumas variáveis toda vez que eu usar um shell interativo, independentemente de ser um shell de login ou não.

    
por S182 30.03.2014 / 00:08

1 resposta

10

Não, não há. Sim, isso é um defeito de design.

Use o seguinte conteúdo em ~/.bash_profile :

if [ -e ~/.profile ]; then . ~/.profile; fi
if [[ -e ~/.bashrc && $- = *i* ]]; then . ~/.bashrc; fi

Tenha em atenção que o bash tem uma peculiaridade ainda mais estranha: quando é uma shell de início de sessão não interactivo e o processo pai é rshd ou sshd , bash sources ~/.bashrc (mas não ~/.bash_profile ou ~/.profile ) . Então você pode querer colocar isso no topo do seu .bashrc :

if [[ $- != *i* ]]; then return; fi

Veja também Diferença entre .bashrc e .bash_profile e Diferença entre o Shell de Login e o Shell de Não Login?

    
por 30.03.2014 / 00:14