Best bash prompt. Ever.

I have the best bash prompt ever. It took a lot of hacking and googling, but here she is:

Notice that the smiley face and text colors change depending on the exit code of the last run command (red = failed, green = happy). This is handy, for example, after a big long build that has error messages buried in it, and the last line of output just isn’t that useful.

To make your prompt awesome, put this in your .bashrc and enjoy:

Happy bashing!

5 Responses to “Best bash prompt. Ever.”

  1. Hans Says:

    Does your version of bash handle the wrapping ok when you do this? I used to have color on my input line and finally gave up. My current prompt is this:

    $(r=$?; [ 0 == $r ] || echo "\[\e[0;33m\]$r\[\e[0m\] ")\u@\h \[\e[0;32m\]\w\[\e[0m\]\n\$

    This gives me a little color, which makes finding previous prompts easy when scrolling up, and the return status is there in yellow if it’s not 0. But no color on the actual input line, and also the longest input line possible, and so I have minimal issues with different versions of bash and their myriad wrapping bugs.

  2. Dave Says:

    Yeah, my bash does handle the wrapping. However, if yours does not, you can just put all that “export PS1″ stuff on a single line.

  3. Evan Farrer Says:

    For users of git I recommend a slight modification. This adds the current git branch when you’re in a git controlled directory. It’s not as elegant (multiple echo’s) but more awesome.

    export PS1="\`if [ \$? = 0 ];
                  then
                      echo -en '$GREEN--( $LIGHT_CYAN\u$YELLOW@$LIGHT_CYAN\h$GREEN )--( $YELLOW\w$GREEN )--( $PURPLE'; __git_ps1 "%s"; echo -n '$GREEN )-- :) \n--\$$DEFAULT_COLOR ';
                  else
                      echo -en '$LIGHT_RED--( $LIGHT_CYAN\u$YELLOW@$LIGHT_CYAN\h$LIGHT_RED )--( $YELLOW\w$LIGHT_RED )--( $PURPLE'; __git_ps1 "%s"; echo -n '$LIGHT_RED )-- :         (\n--\$$DEFAULT_COLOR ';
                  fi; \`" 
    
  4. Jamie Smith Says:

    I would like to prompt your bash.

  5. Bonta-Kun Says:

    It’s not so bad, especially the coloring by exit-code.

    However, you might want to do something like: user@host:cwd (that is, put the current directory next to the host). Then you can use the whole string as an ssh/scp target/source…

    Also, coloring the username differently depending on being root or not can really save you :)

Leave a Reply