我想知道如何映射 ksh 中的键Ctrl-D来退出 shell,就像在 bash shell 中一样。
对 ksh 中的键绑定不太熟悉。
编辑
请参阅下面我的评论。
$ echo $0
bash
$ exit # I pressed Ctrl-D here, 'exit' string was placed and the shell exited
$> echo $0
ksh
$> Use 'exit' to leave ksh # I pressed Ctrl-D here, Got this message and returned to the ksh prompt
$> echo $0
ksh
$> cat >> somefile
Some text
$> # I pressed Ctrl-D here. So this key combination is taken as eof char for file, but not for exit.
那么,需要映射以退出 shell 吗Ctrl?D我怎么做?
答案1
Ctrl+ D(ASCII EOT
)已经是映射到退出 shell,在vi
和emacs
模式下,如ksh93
手册页所述。从你的脚本捕获来看,很明显是这样。
手册页还解释了其他人在这里评论的内容,即该键仅在该行为空时才具有此效果。 (这模仿了熟模式下生产线纪律的标准行为。)
您所缺少的(手册页也对此进行了解释)是您已ignoreeof
设置该选项。因此,Korn Shell 在空行上看到了Ctrl+ D,并忽略了它,打印了您看到的消息,以解释在ignoreeof
设置打开时您必须显式使用该exit
命令。
因此,请忘记stty
并捕获处理程序,如另一个答案中所示;简单地说:
设置-o noignoreeof
进一步阅读
- 如何防止 control+d 断开会话?——一个想要达到相反效果的问题有一个相反的答案
答案2
你想要的stty
命令:查看 ^D 如何与 映射stty -a
。您可以将其更改为其他内容stty eof char
:删除“eof”设置stty eof undef
未经测试:您想阅读trap
ksh 手册页中的命令。您为信号设置一个处理程序可能就足够了EXIT
。
# warning: completely untested
exit_handler() { echo "exit"; exit; }
trap exit_handler EXIT