Use more portable shell function definition, better supported by /bin/sh Some /bin/sh, e.g. dash, do not support trap on ERR, so that will issue some trace and will not trigger on ERR, but the rest of the script runs fine.