Existe um arquivo Bash que será sempre originado no modo interativo, independentemente de ser login ou não?


10

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

  • Se shell de login interativo + → /etc/profile, em seguida, a primeira leitura de ~/.bash_profile, ~/.bash_logine~/.profile
  • Se shell + non-login interativo → /etc/bash.bashrc, em seguida,~/.bashrc

Quero definir algumas variáveis ​​sempre que uso um shell interativo, independentemente de ser um shell de logon ou não.



1
@ strugee Não, esta questão não é sobre variáveis ​​de ambiente.
Gilles 'SO- stop be evil'

@ Gilles sim, mas sua resposta se aplica igualmente bem.
strugee

1
@ strugee Isso foi porque eu fui além da pergunta imediata e toquei em um tópico periférico. Um parágrafo em uma resposta não cria uma duplicata. As perguntas são duplicadas apenas se tiverem respostas substancialmente idênticas, e não se uma resposta contiver material suficiente para responder à segunda.
Gilles 'SO- stop be evil'

Respostas:


10

Não, não existe. Sim, este é 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

Cuidado que o bash tem uma peculiaridade ainda mais estranha: quando é um shell de logon não interativo e o processo pai é rshdor sshd, bash sources ~/.bashrc(mas não ~/.bash_profileou ~/.profile). Então, você pode colocar isso no topo do seu .bashrc:

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

Consulte também Diferença entre .bashrc e .bash_profile e Diferença entre o Shell de login e o Shell que não é de login?


Essas peculiaridades são por motivos de segurança (não carregue arquivos inesperados ao executar em uma configuração sensível à segurança).
vonbrand

2
@vonbrand Er, o que? Não, essas peculiaridades não têm absolutamente nada a ver com segurança. Não há "arquivos inesperados" envolvidos (exceto que o carregamento .bashrcem uma configuração não interativa pode realmente contar como inesperado), nem qualquer verificação de qualquer contexto sensível à segurança.
Gilles 'SO- stop be evil'

Tem um método para evitar loops?
Braiam 30/03

1
@Braiam What loops?
Gilles 'SO- stop be evil
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.