snippetbashModeratepending
Bash trap -- cleanup on exit, error, or signal
Viewed 0 times
trapEXITERRcleanuptemp filessignal handler
terminallinuxmacos
Problem
Scripts that create temp files, start background processes, or acquire locks do not clean up when interrupted with Ctrl+C or when an error occurs.
Solution
Use trap to register cleanup functions that run on EXIT, ERR, INT, or TERM signals.
Code Snippets
Trap for guaranteed cleanup
#!/usr/bin/env bash
set -euo pipefail
TMPDIR=$(mktemp -d)
LOCKFILE=/tmp/myapp.lock
cleanup() {
local exit_code=$?
rm -rf "$TMPDIR"
rm -f "$LOCKFILE"
echo "Cleaned up (exit $exit_code)"
}
trap cleanup EXIT # runs on ANY exit (success, error, signal)
# Error handler with line number
trap 'echo "Error on line $LINENO" >&2' ERR
# Now use TMPDIR freely -- auto-cleaned
cp important.dat "$TMPDIR/"
process "$TMPDIR/important.dat"
# Even Ctrl+C triggers cleanup via EXIT trapRevisions (0)
No revisions yet.