How to trap exit code in Bash script

The accepted answer is basically correct, I just want to clarify things.

The following example works well:

#!/bin/bash

cleanup() {
    rv=$?
    rm -rf "$tmpdir"
    exit $rv
}

tmpdir="$(mktemp)"
trap "cleanup" EXIT
# Do things...

But you have to be more careful if doing cleanup inline, without a function. For example this won’t work:

trap "rv=$?; rm -rf $tmpdir; exit $rv" EXIT

Instead you have to escape the $rv and $? variables:

trap "rv=\$?; rm -rf $tmpdir; exit \$rv" EXIT

You might also want to escape $tmpdir, as it will get evaluated when the trap line gets executed and if the tmpdir value changes later that might not give the expected behaviour.

Edit: Use shellcheck to check your bash scripts and be aware of problems like this.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)