user1135541
user1135541

Reputation: 1891

View exit code of a program (After the program exited)

Lets say a program that outputs a zero in case of success, or 1 in case of failure, like this:

main () {
    if (task_success())
        return 0;
    else
        return 1;
}

Similar with Python, if you execute exit(0) or exit(1) to indicate the result of running a script. How do you know what the program outputs when you run it in shell. I tried this:

./myprog 2> out

but I do not get the result in the file.

Upvotes: 0

Views: 2324

Answers (2)

Avihoo Mamka
Avihoo Mamka

Reputation: 4786

There's a difference between an output of a command, and the exit code of a command.

What you ran ./myprog 2> out captures the stderr of the command and not the exit code as you showed above.

If you want to check the exit code of the a program in bash/shell you need to use the $? operator which captures the last command exit code.

For example:

./myprog 2> out
echo $?

Will give you the exit code of the command.

BTW, For capturing the output of a command, you may need to use 1 as your redirect where 1 captures stdout and 2 captures stderr.

Upvotes: 5

Walter A
Walter A

Reputation: 20032

The returnvalue of a command is stored in $?. When you want to do something with the returncode, it is best to store it in a variable before you call another command. The other command will set a new returncode in $?.
In the next code the echo will reset the value of $?.

rm this_file_doesnt_exist
echo "First time $? displays the rm result"
echo "Second time $? displays the echo result"
rm this_file_doesnt_exist
returnvalue_rm=$?
echo "rm returned with ${returnvalue}"
echo "rm returned with ${returnvalue}"

When you are interested in stdout/stderr as well, you can redirect them to a file. You can also capture them in a shell variable and do something with it:

my_output=$(./myprog 2>&1)
returnvalue_myprog=$?
echo "Use double quotes when you want to show the ${my_output} in an echo."
case ${returnvalue_myprog} in
   0) echo "Finally my_prog is working"
      ;;
   1) echo "Retval 1, something you give in your program like input not found"
      ;;
   *) echo "Unexpected returnvalue ${returnvalue_myprog}, errors in output are:"
      echo "${my_output}" | grep -i "Error"
      ;;
esac

Upvotes: 0

Related Questions