Una shell viene avviato quando si effettua il login, ma è anche iniziato da programmi come make
, o quando si esegue uno script di shell, o quando si digita :sh
a vi
, o quando si crea una nuova finestra di terminale.
Inizialmente, la shell veniva letta ~/.profile
quando si eseguiva il login o l'esecuzione su
. Questo script farebbe cose come annunciare se si dispone di una nuova e-mail, personalizzare i caratteri di cancellazione ed eliminazione e impostare ed esportare le variabili TERM e PATH. Quando è stato avviato in quasi tutti gli altri contesti, la shell non ha letto ~/.profile
, perché fare la maggior parte di queste cose sarebbe ridondante. Ci si aspettava che avessero esportato tutte le variabili shell importanti nella nuova shell.
Il modo in cui la shell sapeva se leggere ~/.profile
era verificare se il primo personaggio di argv[0]
, aka $0
, era '-'
.
A partire da csh
, sono stati introdotti gli alias. Gli alias non sono stati esportati nell'ambiente. csh
è stato progettato per leggere in due diversi script di inizializzazione. ~/.login
è stato letto solo quando un utente ha effettuato l'accesso e lo spunto per farlo era se argv[0]
iniziato con '-'
. ~/.cshrc
è stato letto ogni volta che è stata avviata la shell. In generale, uno ha inserito gli alias ~/.cshrc
e tutto il resto ~/.login
. csh
supportato anche ~/.logout
, che nella maggior parte dei casi ha semplicemente cancellato lo schermo ed eseguito fortune
.
Altre shell hanno adottato le stesse caratteristiche. ksh
leggerebbe ~/.kshrc
, bash
leggerebbe ~/.bashrc
, e quelli erano dove avresti posto le tue definizioni alias.
Quindi, per farla breve, l'applicazione che genera una shell arriva a decidere se deve essere una "shell di accesso", nel qual caso all'inizio esiste '-'
una shell normale. Nella maggior parte dei casi, una shell che sarà interattiva viene avviata come shell di accesso e una shell intendeva solo eseguire alcuni comandi, come argomenti o da uno script, e quindi uscire è una shell normale.
Ma dipende tutto dal capriccio dell'applicazione che avvia la shell.