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.'

はえー面白い!