Keluar shell dengan jalan pintas (tidak mengetik keluar) yang menutup sesi dengan benar

12

Saya menggunakan perintah ProxyJump untuk sejumlah sesi ssh yang saya gunakan setiap hari, dan juga banyak beralih pengguna pada sesi ini dan harus mengetik exit3 atau 4 kali berturut-turut tidak terlalu menyenangkan.

Saya mengetahui newline+ ~+ .untuk mengakhiri sesi ssh, saya masih harus memeriksa apakah itu mengakhiri secara damai seperti sebuah keinginan exit, tetapi bagaimana Anda keluar dari semua sesi di shell saat ini dengan satu perintah atau pintasan sehingga mengetik exit3 atau 4 kali dalam kasus saya menjadi hal yang satu kali?

tsujp
sumber
2
~.cukup putuskan klien SSH Anda (itu berguna ketika jaringan telah menghilang, misalnya). Biasanya, daemon SSH akan mengenalinya dan memberi sinyal sesi SIGHUP, jadi itu tidak sama dengan berhenti dari shell secara normal (tapi itu berguna jika Anda tidak bisa mendapatkan respon dari shell).
Toby Speight

Jawaban:

29

Ctrl- DAkan keluar dari shell dalam banyak kasus. Ini lebih cepat daripada mengetik exit Enter. Ini masih bukan perintah tunggal untuk mengakhiri semuanya, tetapi menahan Ctrldan memukul Dbeberapa kali lebih mudah dan lebih cepat. Tidak yakin seberapa berharganya ini untuk kasus penggunaan Anda.

Dibahas secara rinci di sini .

0xSheepdog
sumber
2
Perhentian berikutnya adalah unix.stackexchange.com/a/182071/5132 , dan pemberhentian setelah itu adalah bacaan lebih lanjut di sana. (-:
JdeBP
2
Hati-hati dengan CTRL + D. Dalam bash, jika Anda telah memasukkan karakter apa pun di prompt Anda, menekan CTRL + D akan menjalankannya dengan cara yang sama seperti yang dilakukan Enter. Dengan kata lain, jangan mengetikkan rmperintah dan kemudian tekan CTRL + D jika Anda tidak ingin menjalankannya. Saya tidak melihat perilaku ini di ksh.
Peschke
2
@Peschke Pada setiap sistem saya pernah menggunakan Ctrl + D tidak melakukan apa-apa jika saya mengetik sesuatu. Saya belum pernah melihat perilaku yang Anda gambarkan.
John Kugelman
1
@JohnKugelman Saya menguji dan mengkonfirmasi perilaku pada saat komentar saya dengan bash di RHEL 7.5.
Peschke
3
Peschke menggunakan vibinding input terminal.
JdeBP
5

Mengetik ~.sebenarnya bisa untuk menutup semua koneksi "bersarang" hingga yang terdalam.

Itu melakukannya dengan keluar damai yang Anda inginkan selama semua shell Anda dikonfigurasi untuk menangani SIGHUP sebagai kematian anggun. Bash melakukannya secara default. Anda dapat dengan mudah memeriksa keluar secara damai untuk pengaturan Anda dengan misalnya melihat apakah .bash_historyfile sesi Anda yang lebih dalam mendapatkan pembaruan dengan benar setelah ~., atau jika Anda mengatur bash-es Anda untuk tidak memperbarui .bash_history saat keluar maka Anda mungkin menetapkan trappada EXIT event (atau di Anda ~/.bash_logout) dengan perintah yang menulis sesuatu di suatu tempat dan kemudian lihat apakah itu dijalankan.

Selain itu, saya tidak yakin apa yang Anda maksud dengan "keluar dari semua sesi di shell saat ini". Setiap bash interaktif hanya satu sesi, dan perintah yang Anda ketikkan selalu hanya untuk shell terdalam dari rantai ProxyJump. Jika Anda maksudkan "pekerjaan latar belakang di shell saat ini", bash mengirimkan SIGHUP ke semua pekerjaannya saat menerima SIGHUP oleh daemon ssh pada ~., oleh karena itu keluar seperti itu harus sepenuhnya damai jika mereka yang menjalankan pekerjaan bereaksi dengan benar terhadap SIGHUP.

LL3
sumber