Home > Enterprise >  How to determine Bash function state upon exit?
How to determine Bash function state upon exit?

Time:12-29

While applying the Google Shell Style Guide on some bash code, I learned that I do not exactly know how to determine the exit state of a function. In particular, I was wondering whether any successful bash function returns the state 0, or whether it is only certain commands that ensure it returns state 0.

The example given:

#######################################
# Delete a file in a sophisticated manner.
# Arguments:
#   File to delete, a path.
# Returns:
#   0 if thing was deleted, non-zero on error.
#######################################
function del_thing() {
  rm "$1"
}

Describes the rm action, which apparently results in a state 0. However, I wonder whether all other commands that do not lead to an error also return state 0. (Excluding specific commands to set a specific return state like exit 42).

To find this out, I'd like to inspect the return state of certain functions. Yet I do not yet exactly know how to do that. Hence, I would like to ask: How do I print/see/inspect the return state of a function?

CodePudding user response:

How do I print/see/inspect the return state

The variable $? hols the exit status of the previous command.

literally anything
echo "$?"

del_thing
echo "$?"

Note: do not use $? when checking for failure or success. Use if, like if ! del_thing; then echo "it failed"; fi.

Note: Do not use function with (). Just use name() { .. }, without function. See https://wiki.bash-hackers.org/scripting/obsolete . (https://github.com/google/styleguide/pull/624 ..)

I wonder whether all other commands that do not lead to an error also return state 0

0 exit status is considered success. Nonzero exit status is considered failure. For example, if expression checks if a command has a zero exit status - if anything; then echo "anything exited with zero exit status"; fi.

A function has the exit status of the last command executed. Usually, anything has the exit status of the last command executed. The exit status of del_thing function is the same as the exit status of rm command, because rm command is the last thing executed inside the function.

  • Related