Wyjdź z powłoki za pomocą skrótu (nie wpisując polecenia exit), który poprawnie zamyka sesję

12

Używam polecenia ProxyJump do wielu sesji ssh, z których korzystam codziennie, a także często zmieniam użytkowników na te sesje, a pisanie exit3 lub 4 razy z rzędu nie jest zbyt zabawne.

Wiem, że newline+ ~+ .kończy sesję ssh, wciąż muszę sprawdzić, czy kończy się ona polubownie, jak exitby to zrobiła, ale jak wyjść z wszystkich sesji w bieżącej powłoce za pomocą jednego polecenia lub skrótu, tak że wpisujesz exit3 lub 4 razy w moim przypadku staje się rzeczą jednorazową?

tsujp
źródło
2
~.po prostu odłącza klienta SSH (jest to przydatne na przykład, gdy sieć zniknęła). Zwykle demon SSH rozpoznaje to i sygnalizuje swoją sesję SIGHUP, więc nie jest to tak samo jak normalne wyjście z powłoki (ale jest to przydatne, jeśli nie można uzyskać odpowiedzi z powłoki).
Toby Speight

Odpowiedzi:

29

Ctrl- Dw wielu przypadkach opuści powłokę. Jest szybszy niż pisanie exit Enter. Nadal nie jest to jedno polecenie, aby zakończyć wszystko, ale kilkakrotne przytrzymanie Ctrli trafienie Djest łatwiejsze i szybsze. Nie jestem pewien, jak cenne jest to dla twojego przypadku użycia.

Omówiono szczegółowo tutaj .

0x Owczarek
źródło
2
Następny przystanek to unix.stackexchange.com/a/182071/5132 , a przystanek po nim to dalszy odczyt. (-:
JdeBP
2
Uważaj z CTRL + D. W bash, jeśli wpiszesz jakieś znaki w swoim znaku zachęty, wciśnięcie CTRL + D spowoduje wykonanie tego w taki sam sposób, jak Enter. Innymi słowy, nie wpisuj rmpolecenia, a następnie naciśnij CTRL + D, jeśli nie chcesz go wykonać. Nie widzę tego zachowania w ksh.
Peschke,
2
@ Peschke W każdym systemie, w którym kiedykolwiek używałem Ctrl + D, nic nie robi, jeśli coś wpisuję. Nigdy nie widziałem opisywanego zachowania.
John Kugelman
1
@JohnKugelman Przetestowałem i potwierdziłem zachowanie w momencie mojego komentarza za pomocą bash na RHEL 7.5.
Peschke,
3
Peschke używa vizacisków wejściowych terminala.
JdeBP
5

W ~.rzeczywistości pisanie polega na zamykaniu wszystkich „zagnieżdżonych” połączeń na najgłębsze.

Czyni to z polubownym wyjściem, o ile chcesz, dopóki wszystkie twoje pociski są skonfigurowane do obsługi SIGHUP jako wdzięcznej śmierci. Bash robi to domyślnie. Można łatwo sprawdzić wyjście polubownego do zestawu podjęte przez np widząc, czy .bash_historypliki z głębszych sesjach się prawidłowo aktualizowane po ~., lub w przypadku ustawienia w bash-es nie do aktualizacji .bash_history po wyjściu następnie można ustawić trapna Zdarzenie EXIT (lub w twoim ~/.bash_logout) z poleceniem, które gdzieś zapisuje, a później sprawdza, czy zostało wykonane.

Poza tym nie jestem pewien, co rozumiesz przez „zamknij wszystkie sesje w bieżącej powłoce”. Każde interaktywne bash to tylko jedna sesja, a wpisywane polecenia zawsze idą tylko do najgłębszej powłoki łańcucha ProxyJump. Jeśli miałeś na myśli „zadania w tle w bieżącej powłoce”, bash wysyła SIGHUP do wszystkich swoich zadań po otrzymaniu SIGHUP przez demona ssh po ~., dlatego takie wyjście powinno być w pełni polubowne, jeśli te uruchomione zadania odpowiednio zareagują na SIGHUP.

LL3
źródło