📜  bash 在脚本中捕获 ctrl-c - BASIC (1)

📅  最后修改于: 2023-12-03 14:39:28.347000             🧑  作者: Mango

Bash 在脚本中捕获 Ctrl-C - BASIC

当用户按下 Ctrl-C 组合键时,会向终端发送中断(SIGINT)信号,以终止当前进程的执行。在编写 Bash 脚本时,可以捕获 Ctrl-C 信号,并在执行某些操作后继续执行脚本。本文将介绍如何在 Bash 脚本中捕获 Ctrl-C 信号。

为何捕获 Ctrl-C 信号?

在 Bash 脚本中捕获 Ctrl-C 信号主要是为了解决以下问题:

  • 避免脚本在执行某个操作时突然被中断而导致未完成的操作
  • 在脚本执行过程中增加交互性,例如提示用户是否继续执行或退出脚本
捕获 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 输出

在本节中,我们将以 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 文档或其他相关资源。