This is myscript.sh
:
#!/bin/bash
function mytrap {
echo "Trapped!"
}
trap mytrap EXIT
exit 3
And when I run it:
> ./myscript.sh
echo $?
3
Why is the exit code of the script the exit code with the trap the same as without it? Usually, a function returns implicitly the exit code of the last command executed. In this case:
mytrap
to return 0mytrap
is the last function executed, the script should return 0Why is this not the case? Where is my thinking wrong?
Look the reference from the below man bash
page,
exit [n] Cause the shell to exit with a status of n. If n is omitted, the exit status is that of the last command executed. A trap on EXIT is executed before the shell terminates.
You have the debug version of the script to prove that,
+ trap mytrap EXIT
+ exit 3
+ mytrap
+ echo 'Trapped!'
Trapped!
Consider the same as you mentioned in your comments, the trap
function returning an error code,
function mytrap {
echo "Trapped!"
exit 1
}
Look the expanded version of the script,
+ trap mytrap EXIT
+ exit 3
+ mytrap
+ echo 'Trapped!'
Trapped!
+ exit 1
and
echo $?
1
To capture the exit code on trap
function,
function mytrap {
echo "$?"
echo "Trapped!"
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With