bashのシグナルをトラップする

July 30, 2021

シグナルをトラップする方法

参考この人のシェルスクリプト関連の話題は深い… シェルスクリプトでシグナルをトラップして処理したい場合に参考になった。

tracebackの方はサブシェルで起動するようにすれば良いかも

#!/bin/bash
set -u # Check unset variables only
#set -ue # Check unset variables. Exit on error
LANG=C
 
# Trap signals
trap_HUP() {
  echo "Trap HUP signal."
  exit 1
}
trap_INT() {
  echo "Trap INT signal."
  exit 1
}
trap_TERM() {
  echo "Trap TERM signal."
  exit 1
}
trap_QUIT() {
  echo "Trap QUIT signal."
  exit 1
}
on_exit(){
  echo "Kill child processes on exit by 'pkill -P $$'"
  pkill -P $$
  echo "Exit."
}
on_error() {
  errcode=$?
  echo "error line $1: command exited with status $errcode."
}
 
trap 'trap_HUP' HUP
trap 'trap_INT' INT
trap 'trap_QUIT' QUIT
trap 'trap_TERM' TERM
 
# bash pseudo-signals
trap 'on_exit' EXIT
trap 'on_error $LINENO' ERR

Profile picture

Written by tin-machine 技術関連のメモ Twitter