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?
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:
Significa che bash
viene 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'--login
opzione.Quando bash viene invocato come shell di login interattiva o come shell non interattiva con l'
--login
opzione, legge prima ed esegue i comandi dal file/etc/profile
, se quel file esiste. Dopo aver letto il file, si cerca~/.bash_profile
,~/.bash_login
e~/.profile
, in questo ordine, e legge ed esegue i comandi dal primo che esiste ed è leggibile. L'--noprofile
opzione 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 -pf
nel tuo ps
output, che di default avvia una shell di login.
Prova a correre login -pf
e login -pfl
vedi la differenza. man login
descrive la differenza:
-l
Indica 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 diargv[0]
; questa opzione lo disabilita), e impedisce che vengachdir(2)
inserita nella home directory dell'utente . L'impostazione predefinita è aggiungere il trattino (questa è una sessione di accesso).
echo $0
: se digito echo $0
il 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é?
--login
argomento, non cambia il suo argv[0]
, ma funge da shell di login.
man
cita