Quitter le shell avec un raccourci (sans taper exit) qui ferme correctement la session

12

J'utilise une commande ProxyJump pour un certain nombre de sessions ssh que j'utilise quotidiennement, et je change aussi beaucoup d'utilisateurs sur ces sessions et devoir taper exit3 ou 4 fois de suite n'est pas trop amusant.

Je suis au courant de newline+ ~+ .pour terminer une session ssh, je dois encore vérifier s'il la termine à l'amiable comme le exitferait, mais comment quitter toutes les sessions dans le shell actuel avec une seule commande ou un raccourci de sorte que taper exit3 ou 4 fois dans mon cas devient une chose unique?

tsujp
la source
2
~.déconnecte simplement votre client SSH (c'est utile lorsque le réseau a disparu, par exemple). Normalement, le démon SSH reconnaîtra cela et signalera sa session avec SIGHUP, donc ce n'est pas tout à fait la même chose que de quitter le shell normalement (mais c'est utile si vous ne pouvez obtenir aucune réponse du shell).
Toby Speight

Réponses:

29

Ctrl- Dquittera un shell dans de nombreux cas. C'est plus rapide que de taper exit Enter. Ce n'est toujours pas une seule commande pour tout terminer, mais maintenir Ctrlet frapper Dplusieurs fois est plus facile et plus rapide. Je ne sais pas à quel point cela est utile pour votre cas d'utilisation.

Discuté en détail ici .

0xSheepdog
la source
2
L'arrêt suivant est unix.stackexchange.com/a/182071/5132 , et l'arrêt après cela est la lecture supplémentaire. (-:
JdeBP
2
Soyez prudent avec CTRL + D. En bash, si vous avez entré des caractères dans votre invite, appuyer sur CTRL + D l'exécutera de la même manière qu'Enter. En d'autres termes, ne tapez pas une rmcommande, puis appuyez sur CTRL + D si vous ne souhaitez pas l'exécuter. Je ne vois pas ce comportement dans ksh.
Peschke
2
@Peschke Sur tous les systèmes que j'ai jamais utilisés, Ctrl + D ne fait rien si j'ai tapé quelque chose. Je n'ai jamais vu le comportement que vous décrivez.
John Kugelman
1
@JohnKugelman J'ai testé et confirmé le comportement lors de mon commentaire avec bash sur RHEL 7.5.
Peschke
3
Peschke utilise les viliaisons d'entrée du terminal.
JdeBP
5

Taper ~.fait en fait l'astuce de fermer toutes les connexions "imbriquées" jusqu'au plus profond.

Il le fait avec la sortie amicale que vous souhaitez tant que tous vos obus sont configurés pour gérer SIGHUP comme une mort gracieuse. Bash le fait par défaut. Vous pouvez facilement vérifier l'exit à l'amiable pour votre configuration en voyant par exemple si les .bash_historyfichiers de vos sessions plus profondes sont correctement mis à jour après le ~., ou si vous définissez vos bash-es pour ne pas mettre à jour .bash_history à la sortie alors vous pouvez définir un trapsur le Événement EXIT (ou dans votre ~/.bash_logout) avec une commande qui écrit quelque chose quelque part et voir plus tard s'il a été exécuté.

De plus, je ne suis pas sûr de ce que vous entendez par «quitter toutes les sessions dans le shell actuel». Chaque bash interactif n'est qu'une session, et les commandes que vous tapez ne vont toujours qu'au shell le plus profond de la chaîne ProxyJump. Si vous vouliez dire "les travaux d'arrière-plan dans le shell actuel", bash envoie SIGHUP à tous ses travaux lors de la réception de SIGHUP par le démon ssh sur le ~., donc une telle sortie devrait être entièrement amicale si ces travaux en cours d'exécution réagissent correctement à un SIGHUP.

LL3
la source