Reputation: 1995
I am working on a shell script, and want to handle various exit codes that I might come across. To try things out, I am using this script:
#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 1
exit 1;
I suppose I am missing something, but it seems I can't trap my own "exit 1". If I try to trap 0 everything works out:
#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 0
exit
Is there anything I should know about trapping HUP (1) exit code?
Upvotes: 3
Views: 2713
Reputation: 360143
That's just an exit code, it doesn't mean HUP. So your trap ... 1
is looking for HUP, but the exit is just an exit.
In addition to the system signals which you can list by doing trap -l
, you can use some special Bash sigspecs: ERR, EXIT, RETURN and DEBUG. In all cases, you should use the name of the signal rather than the number for readability.
Upvotes: 2
Reputation: 2486
You can also use || operator, with a || b, b gets executed when a failed
#!/bin/sh
failed
{
echo "Failed $*"
exit 1
}
dosomething arg1 || failed "some comments"
Upvotes: 0
Reputation: 11837
trap
dispatches on signals the process receives (e.g., from a kill
), not on exit codes, with trap ... 0 being reserved for process ending. trap /blah/blah 0
will dispatch on either exit 0
or exit 1
Upvotes: 5