Dash (-) davanti a bash


14

Se esamino la shell bash in un OS X (10.6.4) terminale, ad esempio digitando echo $0, c'è un trattino davanti mio guscio, in questo modo: -bash. Cosa significa questo trattino?

Risposte:


14

Significa che bashviene invocato come shell di login.


man bash dice:

Una shell di login è quella il cui primo carattere dell'argomento zero è a -, oppure uno è iniziato con l' --loginopzione.

Quando bash viene invocato come shell di login interattiva o come shell non interattiva con l' --loginopzione, legge prima ed esegue i comandi dal file /etc/profile, se quel file esiste. Dopo aver letto il file, si cerca ~/.bash_profile, ~/.bash_logine ~/.profile, in questo ordine, e legge ed esegue i comandi dal primo che esiste ed è leggibile. L' --noprofileopzione può essere usato quando il guscio viene avviato per inibire questo comportamento.

Quando esce una shell di login, bash legge ed esegue i comandi dal file ~/.bash_logout, se esiste.


Troverai login -pfnel tuo psoutput, che di default avvia una shell di login.

Prova a correre login -pfe login -pflvedi la differenza. man logindescrive la differenza:

-lIndica al programma eseguito tramite login che questa non è una sessione di accesso (per convenzione, una sessione di accesso viene segnalata al programma con un trattino come primo carattere di argv[0]; questa opzione lo disabilita), e impedisce che venga chdir(2)inserita nella home directory dell'utente . L'impostazione predefinita è aggiungere il trattino (questa è una sessione di accesso).


Ottima risposta, grazie per la spiegazione e mancita
marshall.ward

1
Sto usando Ubuntu e vedo diversi comportamenti di echo $0: se digito echo $0il terminale invocato da ctrl + alt + f1, il risultato è -bash; ma se lo scrivo in termianl invocato da ctrl + alt + t, il risultato è bash(nessun trattino iniziale). Potresti spiegare perché?
Frozen Flame,

@ frozen-flame Uno è una shell di accesso, l'altro no. Si noti che i terminali OS X e Linux hanno comportamenti diversi a tale riguardo.
Daniel Beck

@DanielBeck non è una prova che l'altro non sia una shell di accesso. Quando bash viene lanciato con --loginargomento, non cambia il suo argv[0], ma funge da shell di login.
Ruslan,

@Ruslan Certo, in teoria potrebbe essere ancora una shell di login. Ma non lo è. (Almeno sarei estremamente sorpreso se lo fosse.)
Daniel Beck
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.