Bash スクリプトで Ctrl + C の押下を検知する

Bash スクリプトの実行中に Ctrl + C を押下すると、スクリプトの実行が中断される。コレを検知する方法。

昨日の記事と同じく、trap コマンドを使うとイベントリスナーみたいなのが設定できる。今回はついでにこの中で、「1秒間に2回連続して Ctrl + C が押下されたらスクリプトを終了させる」という風な処理を書いてやる。

#!/usr/bin/env bash

last_exec_sigint=0
function on_sigint() {
  # Quit the program by pressing `^C` twice in a second
  if [ $(date +%s) -lt $(( ${last_exec_sigint} + 1 )) ]; then
    echo '[DEBUG] On SigInt : Exiting...'
    exit 0
  fi
  last_exec_sigint=$(date +%s)
  echo '[DEBUG] On SigInt'
}
trap on_sigint INT

# とりあえず無限に待機させておくので
# Ctrl + C を押下して試してみてほしい
read -p 'Wait.'

はえー面白い!