接受 CTRL-C 作为输入

接受 CTRL-C 作为输入

我在 Linux 脚本中遇到一个问题。

#!/bin/bash 
x=1;
while [ $x != 0 ]
do
  echo "Type a command:"
   read -r command
   eval "$command"
  if [ "$command" = end ]
   then x=0;
  fi
  if [ "$command" = kill ]
   then echo "To end the program, type the end"
  fi
done

我想用 CTRL_C 做同样的事情,就像杀死一样。当用户键入 CTRL_C 时,脚本将显示: 要结束程序,请键入 end。但我不知道该怎么做。

作业是:

编写一个循环运行的脚本,显示“Enter command:”消息并从键盘检索字符串。如果用户输入“end”,则脚本应该结束。在所有其他情况下,他应该将输入的字符串视为应由 shell 执行的命令。如果在工作期间按下该键或尝试使用kill命令终止脚本,则脚本应显示以下信息: 要完成工作,请写“end”

答案1

当您有终端仿真时,Ctrl-C 是“特殊的”,因为它会被捕获并导致信号 (SIGINT) 发送到您的脚本。您有两个选择:

  • 您可以让您的脚本捕获 SIGINT 并根据您的意愿进行处理。这是通过trap xxx SIGINT其中 xxx 是要执行的 bash 函数来完成的
  • 您可以通过运行使终端忽略 ctrl-c stty intr undef。不过,您很可能会在捕捉 ctrl-c 时遇到一些问题。

相关内容