Much better approach (assuming all your terminals use the same colors codes, you could of course use tput if not):<p><pre><code> RED="\[\033[31;1m\]"
NORMAL="\[\033[0m\]"
PS1_INSIDE='\u@\h:\w$bad\$ '
PS1="\`
retcode=\$? ;
if [ 0 -ne \$retcode ]; then
bad=\" [\\\\\\\$?=\$retcode]\"
echo \"$RED$PS1_INSIDE$NORMAL\"
else
bad='';
echo \"$PS1_INSIDE\";
fi;
\`"
unset RED NORMAL PS1_INSIDE
</code></pre>
Examples:<p><pre><code> anthony@Tao:~$ true
anthony@Tao:~$ false
anthony@Tao:~ [$?=1]$ # actually in bold red</code></pre>
This article describes any easy way to do this incorrectly.<p>It also has simple spelling errors, such as 'weather' for 'whether'.<p>It is NOT what I've come to expect from HN. Downvotes for everyone involved.<p><i></i> Oh. Right. I can't downvote. Damn.