📅  最后修改于: 2023-12-03 14:39:28.347000             🧑  作者: Mango
当用户按下 Ctrl-C
组合键时,会向终端发送中断(SIGINT
)信号,以终止当前进程的执行。在编写 Bash 脚本时,可以捕获 Ctrl-C
信号,并在执行某些操作后继续执行脚本。本文将介绍如何在 Bash 脚本中捕获 Ctrl-C
信号。
在 Bash 脚本中捕获 Ctrl-C
信号主要是为了解决以下问题:
在 Bash 脚本中,我们可以使用 trap
命令来捕获 Ctrl-C
信号,语法如下:
trap 'command' INT
其中,command
是捕获到信号后要执行的命令,INT
表示中断(SIGINT
)信号。
可以在脚本的任何位置使用 trap
命令,通常在脚本的开头部分进行设置。如下是一个示例:
#!/bin/bash
function on_interrupt {
echo "Got interrupted. Do you want to continue? (Y/n)"
read -r answer
case "$answer" in
[yY] | [yY][eE][sS])
# 继续执行脚本
;;
*)
echo "Exiting script..."
exit 1
;;
esac
}
# 捕获 Ctrl-C 信号
trap on_interrupt INT
echo "Press Ctrl-C to interrupt the script."
while sleep 1; do
echo "Still running..."
done
在上面的示例中,我们定义了一个名为 on_interrupt
的函数来处理 Ctrl-C
信号。该函数会提示用户是否继续执行脚本或退出脚本。然后,我们使用 trap
命令将 on_interrupt
函数注册为中断信号的处理函数。
接下来,我们进入一个无限循环,每秒钟输出一条消息。此时,如果用户按下 Ctrl-C
组合键,会触发 on_interrupt
函数,提示用户是否继续执行脚本或退出脚本。
在本节中,我们将以 Markdown 格式输出 Bash 脚本示例及其输出:
#!/bin/bash
function on_interrupt {
echo "Got interrupted. Do you want to continue? (Y/n)"
read -r answer
case "$answer" in
[yY] | [yY][eE][sS])
# 继续执行脚本
;;
*)
echo "Exiting script..."
exit 1
;;
esac
}
# 捕获 Ctrl-C 信号
trap on_interrupt INT
echo "Press Ctrl-C to interrupt the script."
while sleep 1; do
echo "Still running..."
done
输出:
Press Ctrl-C to interrupt the script.
Still running...
Still running...
Got interrupted. Do you want to continue? (Y/n)
以上是捕获 Ctrl-C
信号的基本用法和示例。如果你想进一步了解信号和 Bash 脚本编程,请参考 Bash 文档或其他相关资源。