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


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

BEARBEITEN: Dies ist ein Community-Wiki, also könnte man, anstatt zu schließen, Beispiele geben, welche Situationen nach welcher Art von $ SHELL verlangen

Startskripte

Wenn Bash startet, führt es das aus   Befehle in einer Vielzahl von verschiedenen   Skripte.

Wenn Bash als interaktiv aufgerufen wird   Login Shell, es liest zuerst und   führt Befehle aus der Datei aus   / etc / profile, wenn diese Datei existiert.   Nach dem Lesen dieser Datei wird gesucht   ~ / .bash_profile, ~ / .bash_login und   ~ / .profile, in dieser Reihenfolge, und liest   und führt Befehle von der ersten aus   eine, die existiert und lesbar ist.

Wenn eine Login-Shell beendet wird, liest Bash   und führt Befehle aus der Datei aus   ~ / .bash_logout, falls es existiert.

Wenn eine interaktive Shell das nicht ist   Eine Login-Shell wird gestartet, Bash liest   und führt Befehle von ~ / .bashrc aus,   wenn diese Datei existiert. Das mag sein   gesperrt mit der Option --norc.   Die Option --rcfile file wird erzwungen   Bash zum Lesen und Ausführen von Befehlen von   Datei statt ~ / .bashrc.


46


Ursprung


Ich habe die Frage so bearbeitet, dass sie besser zu den Regeln der Half-Arse-Site passt. Ich glaube nicht, dass ich jemals den Wunsch verstehen werde, nützliche Informationen zu löschen ... - Gareth
Warum stimmen die Leute diese Frage ab? Scheint mir vollkommen legitim? - duffbeer703
Ugh, nimm die Antwort aus deiner Frage und poste sie als Antwort. Es ist in Ordnung, Ihre eigene Frage zu beantworten. - derobert
Es ist eine sehr gültige Frage, da die Unterscheidung verwirrend ist. Beachten Sie zum Beispiel, dass Sie, wenn Sie sich über xdm in einer grafischen Umgebung anmelden und xterm ausführen, eine interaktive Shell erhalten und die Startup-Dateien der Login-Shell nicht ausgeführt werden. - pjc50


Antworten:


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, mit der Sie verbunden haben. Später können Sie sie in einige Skripts einfügen, 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 eine begrenzte Maschine ist und Ihre Mitarbeiter sich gegenseitig über ihre Logins informieren möchten, schreiben Sie (1) Nachrichten, die sie über Ihren Login informieren.

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

  • Phantasie Aufforderung
  • Aliasnamen festlegen
  • Geschichtliche Optionen festlegen
  • Definieren Sie benutzerdefinierte Shell-Funktionen
  • Umgebungsvariablen exportieren, (evtl. PAGER, EDITOR wenn systemweite Einstellungen lutschen)
  • Laden von ssh-agent-Variablen, die in gespeichert wurden .bash_profile

Normalerweise würden Sie einschließen .bashrc von .bash_profile mit den folgenden. Die Login-Shell erhält dann alle Ihre Anpassungen und .bash_profile Die Datei muss nicht die bereits vorhandenen Dateien duplizieren .bashrc.

[[ -f ~/.bashrc ]] && . ~/.bashrc

16



Ist eine Login-Shell die erste, die gestartet wird, wenn Sie 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? Scheint nicht interaktiv, aber ist es Login? Was, wenn du nicht auf der Maschine bist? Das sind die Fragen, die unbeantwortet bleiben - François Beausoleil
Nun, DAS ist eine Antwort, die ich verstehen kann: linuxquestions.org/questions/linux-general-1/... - François Beausoleil