我们如何在shell脚本中编码CTRL + D?

时间:2018-10-04 14:48:43

标签: shell

我需要在shell脚本中编写CRTL + D的代码,以退出并显示代码的结果。 在我的代码中,它的目标不是“再见”,我试图在google和其他网站上找到一种解决方案,以用CTRL + D代码替换“再见”。

你能帮我吗?

这是我的代码:

 touch file.txt
 while :
do
    shopt -s nocasematch

  read INPUT_STRING 
  case $INPUT_STRING in
     bob)
        echo "boy">>file.txt
        ;;
    alicia)
        echo "girl">>file.txt
        ;;
    cookie)
           echo "dog">>file.txt
           ;;
    bye)
        cat file.txt
        break
        echo "      "
        ;;
    *)
        echo "unknown">>file.txt
        ;;   
  esac

done

2 个答案:

答案 0 :(得分:2)

CTRL+D不是发送到输入的序列,而是关闭输入,因此在CTRL+D read之后将以非空退出代码退出,并且变量INPUT_STRING将是空的。在脚本中,未检查读取的退出代码。根据您的需要,您可以检查INPUT_STRING是否为空,也可以检查读取的退出代码。

while read INPUT_STRING; do
...
done 
# put the code after
cat file.txt ...

while :; do
   ...
   read INPUT_STRING || break
   ...
done
# put the code after
cat file.txt ...

case $INPUT_STRING in
...
'') # to match empty INPUT_STRING (could be because of CTRL+D)

答案 1 :(得分:1)

在进入案件之前如何检查read的返回状态?

例如:

if [ $? -eq 1 ] ;
  ...
fi

我认为您无法更改read的行为以将ctrl-d捕获在结果变量中。