Traps for Signal Handling
Sets up trap handlers for signals like EXIT, INT, TERM, and ERR to ensure cleanup, graceful shutdown, and error recovery in Bash scripts.
Code
#!/usr/bin/env bash
set -euo pipefail
temp_files=()
cleanup_performed=false
cleanup() {
if [[ "$cleanup_performed" == false ]]; then
cleanup_performed=true
echo "Performing cleanup..."
for f in "${temp_files[@]}"; do
[[ -f "$f" ]] && rm -f "$f"
done
echo "Cleanup complete"
fi
}
on_error() {
local line=$1
echo "Error occurred at line $line" >&2
cleanup
exit 1
}
on_interrupt() {
echo ""
echo "Interrupted by user, cleaning up..." >&2
cleanup
exit 130
}
trap cleanup EXIT
trap 'on_error $LINENO' ERR
trap on_interrupt INT TERM
# Create temp files
for i in 1 2 3; do
tmp=$(mktemp "/tmp/demo-$$-XXXXXX")
temp_files+=("$tmp")
echo "data $i" > "$tmp"
done
echo "Temp files created: ${temp_files[*]}"
echo "Processing..."
sleep 2
echo "Work complete"Report a problem with this exampleOpens a pre-filled issue on GitHub.