退出具有正确关闭会话的快捷方式的shell(不键入exit)


12

我对每天使用的许多ssh会话使用ProxyJump命令,并且在这些会话上频繁切换用户,并且不得不exit连续键入3或4次并不是很有趣。

我知道newline+ ~+ .会终止ssh会话,我仍然必须检查它是否会像那样友好地终止它exit,但是如何用单个命令或快捷方式退出当前shell中的所有会话,例如键入exit3或4次就我而言变成一次性的东西?


2
~.只需断开SSH客户端的连接即可(例如,当网络消失时,这很有用)。正常情况下,SSH守护进程会识别出该事件并通过发出信号SIGHUP,因此它与正常退出Shell并不完全相同(但是,如果您无法从Shell获得任何响应,它很有用)。
Toby Speight

Answers:


29

Ctrl- D在许多情况下会退出外壳。它比键入要快exit Enter。终止所有命令仍然不是一个命令,但是按住几次Ctrl并击中D更容易,更快。不确定这对您的用例有多重要。

这里详细讨论。


2
下一站是unix.stackexchange.com/a/182071/5132,此后的站是那里的进一步阅读。(-:
JdeBP

2
使用CTRL + D时要小心。在bash中,如果在提示符中输入了任何字符,则按CTRL + D将执行Enter的相同方式。换句话说,rm如果您不想执行命令,请不要键入命令,然后按CTRL + D。我在ksh中看不到这种行为。
Peschke

2
@Peschke在我曾经使用过Ctrl + D的每个系统上,如果我键入了某些内容,则不会执行任何操作。我从未见过您描述的行为。
John Kugelman

1
@JohnKugelman我在RHEL 7.5上使用bash进行评论时测试并确认了该行为。
Peschke

3
Peschke正在使用vi终端输入绑定。
JdeBP '19

5

打字~.实际上确实通过关闭最深所有的“嵌套”连接的伎俩。

只要您将所有外壳程序都配置为将SIGHUP处理为正常死亡,它就可以使用您希望的友好出口来实现。Bash默认情况下这样做。您可以轻松地检查设置的友好出口,例如,查看.bash_history以后的深层会话文件是否得到正确更新~.,或者如果将bash-es设置为在退出时不更新.bash_history,则可以trap在EXIT事件(或在您的~/.bash_logout)中,该命令使用在某处写入内容的命令,然后查看它是否已执行。

此外,我不确定“退出当前shell中的所有会话”是什么意思。每个交互式bash只是一个会话,您键入的命令始终仅进入ProxyJump链的最深层外壳。如果您的意思是“当前shell中的后台作业”,则bash会在ssh守护进程接收SIGHUP时,将SIGHUP发送至其所有作业~.,因此,如果那些正在运行的作业对SIGHUP做出了适当的反应,则此退出应该是完全友好的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.