linux – 在ksh中捕获CTRL D.

如何在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)时,一般形式是:

陷阱[命令] [信号捕获]

上一篇:安装retrying模块出现 (Retry(total=4, connect=None, read=None, redirect=None, status=None))


下一篇:linux – 为什么有人会使用echo为bash或ksh中的变量赋值?