我在 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 时遇到一些问题。