Beenden Sie die Shell mit einer Verknüpfung (ohne das Eingeben von exit), mit der die Sitzung ordnungsgemäß geschlossen wird

12

Ich verwende einen ProxyJump-Befehl für eine Reihe von SSH-Sitzungen, die ich täglich verwende, und tausche Benutzer in diesen Sitzungen häufig aus, und es exitmacht keinen Spaß, drei- oder viermal hintereinander zu tippen .

Ich kenne newline+ ~+, .um eine SSH-Sitzung zu beenden. Ich muss immer noch prüfen, ob sie einvernehmlich beendet wird exit, aber wie beendet man alle Sitzungen in der aktuellen Shell mit einem einzigen Befehl oder einer Tastenkombination, bei der man drei- exitoder viermal tippt in meinem Fall wird eine einmalige Sache?

Tsujp
quelle
2
~.Trennt einfach Ihren SSH-Client (nützlich, wenn beispielsweise das Netzwerk verschwunden ist). Normalerweise erkennt der SSH-Daemon dies und signalisiert seine Sitzung mit SIGHUP, so dass dies nicht ganz dem normalen Beenden der Shell entspricht (es ist jedoch nützlich, wenn Sie keine Antwort von der Shell erhalten).
Toby Speight

Antworten:

29

Ctrl- Dwird in vielen Fällen eine Shell verlassen. Es ist schneller als das Tippen exit Enter. Es ist immer noch kein einziger Befehl, alles zu beenden, aber das mehrmalige Halten Ctrlund Schlagen Dist einfacher und schneller. Nicht sicher, wie wertvoll dies für Ihren Anwendungsfall ist.

Hier ausführlich besprochen .

0xSchäferhund
quelle
2
Die nächste Haltestelle ist unix.stackexchange.com/a/182071/5132 , und die nächste Haltestelle ist die weitere Lektüre dort. (-:
JdeBP
2
Seien Sie vorsichtig mit STRG + D. Wenn Sie in der Bash Zeichen in Ihre Eingabeaufforderung eingegeben haben, wird dies durch Drücken von STRG + D genauso ausgeführt wie bei der Eingabe. Mit anderen Worten, geben Sie keinen rmBefehl ein und drücken Sie STRG + D, wenn Sie ihn nicht ausführen möchten. Ich sehe dieses Verhalten nicht in ksh.
Peschke
2
@Peschke Auf jedem System, das ich jemals benutzt habe, macht Strg + D nichts, wenn ich etwas getippt habe. Ich habe das von Ihnen beschriebene Verhalten noch nie gesehen.
John Kugelman
1
@JohnKugelman Ich habe das Verhalten zum Zeitpunkt meines Kommentars mit Bash auf RHEL 7.5 getestet und bestätigt.
Peschke
3
Peschke verwendet die viTerminal-Eingabebindungen.
JdeBP
5

Die Eingabe ~.tatsächlich tut den Trick des Schließens alle die „verschachtelte“ Verbindungen bis in die tiefsten.

Dies geschieht mit dem von Ihnen gewünschten gütlichen Ausgang, solange alle Ihre Muscheln so konfiguriert sind, dass SIGHUP als würdevoller Tod behandelt wird. Bash tut dies standardmäßig. Sie können ganz einfach den gütlichen Ausgang für Ihr Set-up überprüfen , indem Sie zB sehen , ob die .bash_historyDateien Ihrer tieferen Sitzungen richtig , nachdem die aktualisiert werden ~., oder wenn Sie Ihr bash-es nicht zu aktualisieren .bash_history Satz bei der Ausgabe dann könnten Sie einen Satz trapauf dem EXIT-Ereignis (oder in Ihrem ~/.bash_logout) mit einem Befehl, der irgendwo etwas schreibt und später prüft, ob es ausgeführt wurde.

Außerdem bin ich mir nicht sicher, was Sie unter "Alle Sitzungen in der aktuellen Shell beenden" verstehen. Jede interaktive Bash ist nur eine Sitzung, und die von Ihnen eingegebenen Befehle werden immer nur an die tiefste Shell der ProxyJump-Kette gesendet. Wenn Sie "die Hintergrundjobs in der aktuellen Shell" gemeint haben, sendet bash SIGHUP an alle seine Jobs, wenn der ssh-Daemon SIGHUP empfängt. ~.Daher sollte ein solcher Exit vollständig einvernehmlich sein, wenn die ausgeführten Jobs ordnungsgemäß auf ein SIGHUP reagieren.

LL3
quelle