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.