Risposte:
Se sei un normale utente di Ubuntu Desktop, l' unica shell di accesso è ... il tuo desktop (inserisci una password per entrare, giusto;)? Bene, tecnicamente è una shell di login che avvia una GUI, ma sta entrando in gergo. E sì, leggerà le impostazioni in.profile
L'unica volta in cui tu (un normale utente) vedrai probabilmente una shell di accesso che assomiglia a una shell di accesso è se hai qualche problema con il tuo desktop e passi a un terminale virtuale con il collegamento Ctrl+ Alt+ F1.
ssh
(o connettersi localmente con ssh localhost
)bash -l
(o sh -l
)root
shell di login iniziale consudo -i
sudo -u username -i
root
root
utente con (e la sua password)su - username
sudo login
comando per cambiare utente~/.pam_environment
(Solo variabili, non ci sono comandi bash!), Disconnetti, accedi e guarda tutto ciò che appare magicamente sul desktop e in gnome-terminal!
/etc/profile
, /etc/profile.d
oppure ~/.profile
.
Non credo che la risposta corretta possa essere data senza "gergo tecnico". Poiché questa domanda è la prima a comparire in Google per la query "che cos'è una shell di accesso", sto fornendo una risposta più corretta di seguito:
La shell di accesso è semplicemente una shell a cui è stato detto di essere una shell di accesso. Essa non significa guscio che si apre dopo l'accesso, anche se di solito applicazione che si registra nel sta dicendo shell si lancia ad essere una shell di login. Esistono i seguenti modi per dire alla shell che dovrebbe essere un login:
-l
o --login
argomento supponendo che lo sappia (non conosco alcuna shell che non conosca -l
, ma --login
è supportata solo da poche shell).argv[0]
set su -{some_string}
(cioè con HYPHEN-MINUS anteposto al solito argv[0]
o ad un'altra stringa). Questo è ciò che fanno ssh e su: su esegue solo eseguibile con -su
as argv[0]
(ciao a tutti quelli che pensano argv[0]
abbiano qualcosa a che fare con il nome eseguibile attualmente in esecuzione), ssh esegue zsh con -zsh
quando l'utente ha impostato /bin/zsh
come shell.La logicità della shell non ha assolutamente nulla a che fare con nessuno che ti chieda una password o esegua qualche altra procedura di autenticazione. Alcuni programmi come ssh o login (o alcuni emulatori di terminale come urxvt) eseguono shell come login usando argv[0]
quello che inizia con HYPHEN-MINUS. Alcuni come su o sudo (o zsh: vedi il -
modificatore di precomando descritto nella sezione MODIFICATORI PRECOMMAND in man zshmisc
) non lo fanno per impostazione predefinita, ma può essere detto. Alcuni hanno l'unica opzione per dire alla shell di essere quella di accesso usando il suo argomento (es. bash -l
): Ssh con un argomento di comando (che dice esplicitamente a ssh cosa eseguire sul terminale remoto).
Generalmente è meglio consultare prima la documentazione del programma utilizzato per invocare la shell per determinare se la shell sarà quella di accesso e in secondo luogo eseguire alcuni test per determinare se l'app avvierà una shell di accesso (ad esempio aggiungendo echo
a .profile
).
argv[0]
una delle exec*
funzioni, naturale e inevitabile: si forniscono sempre sia il argv[0]
percorso che il comando da eseguire effettivamente quando si usano le exec*
funzioni, anche se non si vuole mai argv[0]
essere diversi dall'esecuzione dei comandi. Altre lingue forniscono i propri modi. In particolare bash consente l'uso exec -a new_argv0 bash
, ma questo, ovviamente, sostituirà la shell attualmente in esecuzione con qualsiasi cosa tu abbia exec
editato, quindi potresti aver bisogno di usare subshell ( (exec -a -zsh zsh)
)
$0
e, forse, anche qualcos'altro (variabile, impostazione, ecc.) è impostato in modo tale che il loginess della shell possa essere rilevato nel file di configurazione, ma chi si preoccupa effettivamente di rilevarlo in modo che possa fare la differenza? Questo è tutto quello che so.