Here’s some things you should start most bash scripts with:
#!/bin/bash set -e set -x set -o pipefail set -u TMPDIR=$(mktemp -d) trap 'rm -rf $TMPDIR' EXIT
Explanations of the lines:
The shebang line is a unix convention that allows scripts to specify their interpreter. Since this is a bash script, we tell it to run this file with bash.
Exit immediately if any command fails. Makes it easy to spot when a script did not complete, and prevents things further down the line from doing the wrong thing because they were only partially setup.
Print each command as it’s run. It’s fantastically useful debug output, though some production scripts should have this disabled.
set -o pipefail
Exit with failure if any substage of a pipeline fails. This is about commands chained together with a pipe; e.g. If your grep command fails, the execution will fail, rather than simply outputting nothing to the next stage of the pipeline.
Makes referencing unset variables an error.
Further explaination of the above three can be found in the Bash Reference Manual entry on Set.
TMPDIR=$(mktemp -d) trap 'rm -rf $TMPDIR' EXIT
Create a scratch dir, automatically delete it when you’re done. It’s often useful to comment out the trap line during debugging.