Make bash show the return code

When using a command line interface, I like to see all the output a program makes. The standard out and error are already dumped to my console, but there is one piece of information usually hidden from the user: the return code.

Add the following to your .bashrc to get a nice notification if a program returns a non-zero code:

export PROMPT_COMMAND='ret=$?; if [ $ret -ne 0 ] ; then echo -e "returned \033[01;31m$ret\033[00;00m"; fi'

It looks like this:

user@host$ false
returned 1
user@host$

6 Replies to “Make bash show the return code”

    1. This alerts me to the fact a command exit non-zero, rather than requiring me to go and check. I’m that lazy 😉

  1. with zsh I just do %F{red}%(?..!%?!) which gives me
    [… ]%false
    [… !1!]%true
    [… ]%

    1. Sure. First let’s reformat it:

      ret=$?
      if [ $ret -ne 0 ] then
          echo -e "returned \033[01;31m$ret\033[00;00m"
      fi
      

      The first thing we do is save the return code from $? into $ret, because subsequent commands, including [, will overwrite it. We then check if the return code is not equal to zero, i.e. is an error, and if so we print that string.

      There isn’t actually any hex codes – the “\033” is octal 33, which is the escape character in ASCII. This tells the terminal to start interpreting the next characters as ANSI escape codes. These can be quite complex, but you can generate them easily with the tput utility.

Leave a Reply

Your email address will not be published. Required fields are marked *