Written by
Jimmy John
on
on
Trap in bash scripts
You may be familiar with the “set -e” you typically see in bash scripts. It means that the script should exit on error (default behaviour of bash is to keep going)
Recently I needed a script to do some cleanup action. i.e. I wanted the script to exit on error, but I also wanted some cleanup action to be performed. A use case might be that if something fails, then before exiting, ship log files to an S3 bucket for troubleshooting.
I used trap for this. It essentially traps signals of interest and then performs cleanup actions specified by the user before exiting. Here is an example:
#!/usr/bin/env bash
set -e
function finish {
aws s3 sync /tmp/logs/ s3://some-bucket-name
}
trap finish EXIT
script1 arg1 &> /tmp/logs/script1.log
script2 arg2 &> /tmp/logs/script2.log
script3 arg3 &> /tmp/logs/script3.log
By using trap, even if any of the script1/script2/script3 fails, the logs will be shipped to S3 so you can troubleshoot it.