Pithikos
Pithikos

Reputation: 20300

BASH: How tell if script uses exit?

Say I have two scripts that just print back the return code from a useless subscript:

script1

(echo; exit 0)
echo $?

script2

(echo)
echo $?

Both give back 0. But is there a way to tell that the first subscript explicitly uses the exit command?

Upvotes: 0

Views: 338

Answers (1)

Pithikos
Pithikos

Reputation: 20300

After some research I got some breakthrough. Namely you can setup an exit_handler that can tell if there was an exit call by simply examining the last command.

#! /bin/bash

exit_handler () {
   ret=$?
   if echo "$BASH_COMMAND" | grep -e "^exit " >> /dev/null
   then
      echo "it was an explicit exit"
   else
      echo "it was an implicit exit"
   fi
   exit $ret
}
trap "exit_handler" EXIT

exit 22

This will print

it was an explicit exit

Now in order to tell the parent, instead of echoing, we can rather write to a file, a named pipe or whatever.


As per noting of choroba, exit without an argument will give implicit call, which is admittedly wrong since exit (without argument) is the same as exit $?. For that reason the regex has to take that into consideration:

#! /bin/bash

exit_handler () {
   ret=$?
   if echo "$BASH_COMMAND" | grep -e "^exit \|^exit$" >> /dev/null
   then
      echo "it was an explicit exit"
   else
      echo "it was an implicit exit"
   fi
   exit $ret
}
trap "exit_handler" EXIT

exit 22

Upvotes: 1

Related Questions