如何在ksh和退出后捕获CTRL D键盘?
while true; do
read cmd
echo $cmd
if [ "$cmd" = "?????" ]; then
break
fi
done
解决方法:
CTRL-D是“文件结束(EOF)”,您需要做的是“陷阱”该输入.不幸的是,没有EOF字符 – 当您按下和弦CTRL-D时,tty通过返回一个sentinel值使其退出,向读取应用程序发送输入流已完成的信号.
为了防止将此字符视为进一步输入,它必须是一个特殊字符(例如超出范围的字符,如-1).当终端检测到这样的字符时,它会缓冲所有字符,使输入为空,从而使程序读取零字节(文件结束).
您可能遇到问题,因为读取命令在接收eof时退出,因此您的脚本可能在到达条件之前终止.这有打破脚本的副作用,但可能不是你想要的方式.
尝试:
#!/usr/bin/env ksh
# unmap so we can control the behavior
stty eof ^D
while true; do
read cmd
echo $cmd
# are we out of input? let's get a taco
if [ ! -n "$cmd" ]; then
echo 'taco time'
fi
done
当你得到其他信号(如^ C)时,一般形式是:
陷阱[命令] [信号捕获]