bashrc o bash_profile?


49

Conosco la differenza tra i due script di login bash:

.bashrc è gestito solo da shell "non login".

.bash_profile(o .bash_logino .profile) viene eseguito da shell "login".

Qualcuno ha alcuni buoni esempi di quali sono le cose che si adattano meglio all'esecuzione di solo accesso, in modo che le inserissi solo .bash_profile, ma non avrebbero davvero senso .bashrc?

(So che la maggior parte di noi fonte .bashrcfuori .bash_profile, quindi non sembra essere molto senso la questione opposta ...)


Risposte:


24

Dato che a .bashrcè per shell non di accesso, evito qualsiasi comando che riecheggi sullo schermo. Ho anche incontrato esperienze in cui le istruzioni echo .bashrccauseranno il fallimento dei comandi sftp e rsync (e forse anche dei comandi scp).

# Print some information as we log in
# -s: OS Name -n: Node name -r: OS Release
uname -snr
uptime

Inoltre, generalmente non eseguirete ssh-agent da una shell non interattiva. Quindi ho questo dentro .bash_profile.

if [ -f ~/.ssh/ssh-agent ]; then . ~/.ssh/ssh-agent; fi

2
Se usi ~ / .profile invece di ~ / .bash_profile le cose continueranno a funzionare anche se cambi shell ... ~ / .bash_profile è per cose specifiche di bash.
LassePoulsen,

1
Ma bash eseguirà ESCLUSIVAMENTE .bash_profile O .profile, quindi se hai intenzione di usare entrambi, devi estrarre .profile dall'interno di .bash_profile o qualcosa del genere. Non è una cattiva idea, in realtà ...
Don Faulkner,

@Source & @Don: punti positivi. Avevo Bashisms nel mio .bash_profile, ma ora sono passato a qualcosa di più universale. Forse usare .profile è in ordine.
Stefan Lasiewski,

Per quanto riguarda i comandi di produzione di output che .bashrcinterferiscono con i metodi di trasferimento di file remoti implementati tramite flussi standard , la soluzione consiste nel mettere tali comandi nel codice che controlla se la shell è interattiva e continua solo se lo è. I .bashrcfile predefiniti degli utenti in Ubuntu, copiati al /etc/skel/.bashrcmomento della creazione dell'account, così come a livello di sistema /etc/bash.bashrc, contengono già codice che controlla e restituisce se la shell non è interattiva (anche se si devono ancora mettere i propri comandi di produzione di output sotto di essi).
Eliah Kagan,

8

Byobu è un ottimo esempio di qualcosa che non dovresti mai inserire .bashrc.

Altrimenti, si eseguirà in modo ricorsivo in ciascuno dei suoi "terminali virtuali" ;-)

Puoi provarlo, è divertente.

Questo è il motivo per cui lo hai inserito .profile, quindi byobu (che in realtà è solo un involucro attorno allo schermo) viene caricato solo una volta, al momento del login. E byobu stesso può iniziare nuove sessioni bash interattive.


Questo è un buon esempio. Grazie anche per il puntatore a Byobu. Ora per provarlo.
Don Faulkner,
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.