I want to display a green smile face if the previous exit code is 0 and red smile face if not successful.
Basically I want to do this prompt but with other stuff in
This works for me:
export PS1="\
\$(if [[ \$? -gt 0 ]]; then printf \"\\[\\033[01;31m\\]\xF0\x9F\x98\xA7\"; else printf \"\\[\\033[01;32m\\]\xF0\x9F\x98\x83\"; fi)\
\[\033[01;30m\]\u\
\[\033[01;33m\]@\
\[\033[01;36m\]\h \
\[\033[01;33m\]\w \
\[\033[01;31m\][\$(__git_ps1 '%s')] \
\[\033[01;35m\]\\$ \
\[\033[00m\]\
"
I assume your quoting is not correct. I fiddled a little bit around with this and finally got it working:
$ bash --version
GNU bash, version 4.4.12(3)-release (i686-pc-cygwin)
$ smiley()
> {
> if [ "$?" == "0" ]; then
> echo -e '\e[0;32m:) '
> else
> echo -e '\e[0;31m:( '
> fi
> }
$ PS1="$PS1"'`smiley`'
$ :) rm non-existing
rm: cannot remove 'non-existing': No such file or directory
$ :( echo "Everything fine"
Everything fine
$ :)
I did this on Windows (64 bit) but I guess it should work on Linux (or any other Unix-like) as well.
Notes:
I wrote a function smiley()
(a simplified version of your) and checked it by calling it from command line. It worked fine.
I added it to PS1
and it echoed :)
in any case. I realized that the bash replacement was already done in assignment of PS1
.
Thus, I safed the invocation of smiley
by an extra pair of single quotes to defer the invocation until the output of prompt. Now, it works like expected.
Because the questioner required a colored version I made an update. I found the actual solution in this link: SO: How to change the output color of echo in Linux. It's easy to find the necessary terminal escape sequences. The trick is to use echo -e
to enable the backslash escaping in echo
.
The snapshot below shows how does it look (with colors):
I adapted Michael A's answer for a .bashrc
file (in my case, git-for-windows)
PS1='\
`if [[ $? -gt 0 ]]; then printf "\[\033[01;31m\]:("; else printf "\[\033[01;32m\]:)"; fi`\
\[\033]0;$TITLEPREFIX:$PWD\007\] \
\[\033[32m\]\u@\h \
\[\033[33m\]\w\
\[\033[36m\]`__git_ps1`\
\[\033[0m\]\n$'
For reference the default is:
PS1='\
\[\033]0;$TITLEPREFIX:$PWD\007\]\n\
\[\033[32m\]\u@\h\
\[\033[35m\] $MSYSTEM \
\[\033[33m\]\w\
\[\033[36m\]`__git_ps1`\
\[\033[0m\]\n$'