2013-08-12 7 views

Antwort

49

eine interaktive Shell ist ein ohne nicht-Optionsargumente gestartet, es sei denn, es angegeben wird, ohne dass die -c-Option spezifiziert, und deren Eingangs- und Fehlerausgang ist mit Anschlüssen sowohl angeschlossen (wie durch isatty bestimmt (3)), oder man begann mit der Option -i.

Eine interaktive Shell liest im Allgemeinen aus und schreibt an einem Endgerät des Benutzers.

[gnu bash manual]

A Login-Shell ist eine Shell, wo Sie sich einloggen. Sie können ein Login-Shell von einem ps -f Angebote erkennen, wird es einen Bindestrich zu Beginn des Programmnamen, zum Beispiel:

root  3561 3553 0 09:38 pts/0 00:00:00 -bash 
qa  7327 3432 0 10:46 pts/1 00:00:00 -bash 

Ein interaktiv Shell eine ist, die Befehle liest es Standard-Eingabe ist, normalerweise ein Terminal.

Wenn Sie sich beispielsweise mit einem Xterm oder Terminalemulator wie putty bei bash anmelden, ist die Sitzung sowohl eine Login-Shell als auch eine interaktive Shell. Wenn Sie dann bash eingeben, geben Sie eine interaktive Shell ein, aber es ist keine Login-Shell.

Wenn ein Shell-Skript (eine Datei Shell-Befehle enthält) ausgeführt wird, dann ist es weder ein Login-Shell noch ein interaktiver ein.

IBN Dateien sind in bash sehr tailor:

Wenn ein Login-Bash-Shell aufgerufen wird, dann wird /etc/profile bezogen (in der aktuellen Umgebung ausgeführt wird). Danach werden drei Dateien auf Existenz überprüft. Die Kontrollen für diese Dateien sind in dieser Reihenfolge durchgeführt werden:

wenn /etc/profile vorhanden ist, Quelle (run) es
wenn ~/.bash_profile exists, Quelle (run) es
wenn ~/.bash_login exists, Quelle (run) es
wenn ~/.profile exists, Quelle (run) es

Sobald eine Übereinstimmung gefunden wird, werden die anderen Dateien ignoriert, selbst wenn sie vorhanden sind. Die Datei /etc/bashrc wird möglicherweise von den Dateien ~/.bash_profile und ~/.bashrc verwendet. Das würde bedeuten, dass die Datei /etc/bashrc aus allen interaktiven Aufrufen von bash stammt, egal ob es sich um eine Login- oder Nicht-Login-Shell handelt.

So wird die Datei .bashrc auch jedes Mal ausgeführt, wenn Sie eine neue interaktive Shell anfordern. Dies beinhaltet kein Shell-Skript. Normalerweise werden Variablen, Aliase oder Funktionen in dieser Datei platziert.

Bash-Shell-Skripte lesen bei entsprechender Anweisung eine andere Datei. Wenn der Benutzer (normalerweise in seinem eigenen .bash_profile) eine Variable BASH_ENV definiert, die einen Dateinamen enthält, lesen Skripte dies. Wenn diese Variable nicht gesetzt (und exportiert) wird, werden Bash-Skripte keine Startup-Dateien lesen.

+1

Ich bin wirklich dankbar für den wertvollen Kommentar. Vielen Dank ! – caesar

+2

Siehe 'man bash' im Abschnitt' INVOCATION' auf den Dateien, die beim Start geladen werden, die Informationen dort können sehr wahrscheinlich klarer sein. – sjas

+0

Kann es eine Login-Shell geben, die nicht interaktiv ist? Klingt unmöglich. – CMCDragonkai

0

Da Sie wahrscheinlich wissen, was eine „Schale“ ist und es Ihre Frage nur verwenden, zielt auf die Differenz zwischen Login-Shell und alles andere ...

Ein Login-Shell nur durch die von einer anderen Schale unterscheidet Tatsache, dass ein oder mehrere initiale Setup-Skripte (Ressourcen) beim Start geladen werden, normalerweise mit "profile" in ihrem Namen benannt. Dort sind Grundeinstellungen definiert, die auf nachfolgend geöffnete Shells abgeleitet werden (müssen also nur einmal definiert werden).

Verwandte Themen