Was ist der Unterschied zwischen einer 'Login'- und einer' Interactive'-Bash-Shell?

50

Was ist der Unterschied zwischen einer 'Login'- und einer' Interactive'-Bash-Shell? Ich habe Wikipedia unten zitiert, aber kann jemand eine bessere Antwort geben?

BEARBEITEN: Dies ist ein Community-Wiki. Anstatt also zum Schließen abzustimmen, können Sie Beispiele dafür angeben, in welchen Situationen welche Art von $ SHELL erforderlich ist

Startskripte

Beim Start von Bash werden die Befehle in verschiedenen Skripten ausgeführt.

Wenn Bash als interaktive Anmeldeshell aufgerufen wird, liest es zuerst die Befehle aus der Datei / etc / profile und führt sie aus, sofern diese Datei vorhanden ist. Nach dem Lesen dieser Datei sucht sie in dieser Reihenfolge nach ~ / .bash_profile, ~ / .bash_login und ~ / .profile und liest und führt Befehle von der ersten Datei aus, die vorhanden und lesbar ist.

Wenn eine Anmeldeshell beendet wird, liest Bash Befehle aus der Datei ~ / .bash_logout und führt sie aus, falls vorhanden.

Wenn eine interaktive Shell gestartet wird, die keine Anmeldeshell ist, liest Bash Befehle von ~ / .bashrc und führt sie aus, sofern diese Datei vorhanden ist. Dies kann mit der Option --norc verhindert werden. Die Option --rcfile file erzwingt, dass Bash anstelle von ~ / .bashrc Befehle aus der Datei liest und ausführt.

Gyaresu
quelle
Ich habe die Frage so bearbeitet, dass sie besser zu den Regeln der halben Website passt. Ich glaube nicht, dass ich jemals den Wunsch verstehen werde, nützliche Informationen zu löschen ...
Gareth
7
Warum stimmen die Leute diese Frage ab? Scheint mir vollkommen legitim?
duffbeer703
2
Puh, nimm die Antwort aus deiner Frage und poste sie als Antwort. Es ist in Ordnung, Ihre eigene Frage zu beantworten.
Derobert
2
Dies ist eine sehr berechtigte Frage, da die Unterscheidung verwirrend ist. Beachten Sie beispielsweise, dass Sie beim Anmelden in einer grafischen Umgebung über xdm und beim Ausführen von xterm eine interaktive Shell erhalten und die Startdateien der Anmeldeshell nicht ausgeführt werden.
pjc50

Antworten:

16

In den Profildateien Ihrer Login-Shell können Sie einige Dinge einrichten, die Sie während Ihrer Sitzung verwenden und die nur einmal ausgeführt werden müssen. Einige Ideen:

  • Erstellen Sie eine temporäre Datei mit der IP-Adresse, von der aus Sie eine Verbindung hergestellt haben. Später können Sie sie in einige Skripts aufnehmen, die Firewall-Regeln festlegen.
  • Führen Sie ssh-agent aus, fragen Sie nach Ihren SSH-Schlüsseln und speichern Sie die Umgebungsvariablen des SSH-Agenten in einer Datei.
  • Wenn dies ein begrenzter Computer ist und Ihre Mitarbeiter über die gegenseitigen Anmeldungen informiert werden möchten, schreiben Sie (1) Nachrichten, in denen Sie über Ihre Anmeldung informiert werden.

In den Dateien einer Nicht-Login-Shell ( .bashrc) sollten Sie Ihre Shell konfigurieren:

  • Ausgefallene Eingabeaufforderung
  • Aliase setzen
  • Verlaufsoptionen festlegen
  • Definieren Sie benutzerdefinierte Shell-Funktionen
  • Umgebungsvariablen exportieren (möglicherweise PAGER, EDITOR, wenn systemweite Einstellungen nicht funktionieren)
  • Laden Sie die in gespeicherten ssh-agent-Variablen .bash_profile

Normalerweise würden Sie .bashrcvon .bash_profilemit folgendem aufnehmen. Dann erhält die Login-Shell alle Ihre Anpassungen, und die .bash_profileDatei muss keine bereits vorhandenen Elemente duplizieren .bashrc.

[[ -f ~/.bashrc ]] && . ~/.bashrc
hayalci
quelle
3
Ist eine Login-Shell die erste, die gestartet wird, wenn Sie neu auf dem Computer sind? Alle anderen Shells, die Sie danach öffnen, können interaktiv sein oder auch nicht. Eine Shell, die von Cron läuft? Erscheint nicht interaktiv, ist es aber ein Login? Was ist, wenn Sie nicht an der Maschine sind? Das sind die Fragen, die unbeantwortet bleiben
François Beausoleil
4
Das ist eine Antwort, die ich verstehen kann: linuxquestions.org/questions/linux-general-1/…
François Beausoleil