Esiste un file Bash che verrà sempre reperito in modalità interattiva, indipendentemente dal fatto che sia login o non login?


10

Per quanto ne so, le shell interattive possono essere login o non login, e i file di avvio per loro sono diversi.

  • Se shell di login interattiva + → /etc/profilepoi la prima lettura di ~/.bash_profile, ~/.bash_logine~/.profile
  • Se interattivo + shell non di accesso → /etc/bash.bashrcallora~/.bashrc

Voglio impostare alcune variabili ogni volta che utilizzo una shell interattiva, indipendentemente dal fatto che sia o meno una shell di login.



1
@strugee No, questa domanda non riguarda le variabili d'ambiente.
Gilles 'SO- smetti di essere malvagio' il

@Gilles sì, ma la tua risposta si applica ugualmente bene.
strugee,

1
@strugee Questo perché sono andato oltre la domanda immediata e ho toccato un argomento periferico. Un paragrafo in una risposta non costituisce un duplicato. Le domande sono duplicate solo se hanno risposte sostanzialmente identiche, non se una risposta contiene abbastanza materiale per rispondere alla seconda.
Gilles 'SO-smetti di essere malvagio' il

Risposte:


10

No, non c'è. Sì, questo è un difetto di progettazione.

Usa il seguente contenuto in ~/.bash_profile:

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

Attenzione che bash ha una stranezza ancora più strana: quando si tratta di una shell di login non interattiva e il processo padre è rshdo sshd, bash source ~/.bashrc(ma no ~/.bash_profileo ~/.profile). Quindi potresti voler metterlo in cima al tuo .bashrc:

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

Vedi anche Differenza tra .bashrc e .bash_profile e differenza tra Shell di accesso e Shell di non accesso?


Queste stranezze sono per motivi di sicurezza (non caricare file imprevisti quando si esegue in un'impostazione sensibile alla sicurezza).
vonbrand,

2
@vonbrand Er, cosa? No, queste stranezze non hanno assolutamente nulla a che fare con la sicurezza. Non ci sono "file imprevisti" coinvolti (tranne per il fatto che il caricamento .bashrcin un'impostazione non interattiva in realtà può valere come imprevisto), né alcun controllo di alcun contesto sensibile alla sicurezza.
Gilles 'SO-smetti di essere malvagio' il

È un metodo per prevenire i loop?
Braiam,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.