Let's improve the Bash prompt even further from my last post. I want to see the exit status of the last command in the bash prompt.
All (good written) programs have different exit status depending on how they where terminated. Exit status "0" is equivalent to "I terminated normally", all other exit status codes are the same as "non-normal exit" or "something went wrong". Unfortunate, there is not defined any standard exit status table that can say something about what went wrong given a numeric exit status. That is up to the programmer to decide.
lars@titan:~$ test 1 -eq 1
lars@titan:~$ echo $?
0
lars@titan:~$ test 1 -eq 2
lars@titan:~$ echo $?
1
lars@titan:~$ notanycommand
bash: notanycommand: command not found
lars@titan:~$ echo $?
127
I know that the exit status is stored in "$?". I use that to colorize my prompt red if the exit status is anything but "0" ("all ok"). In the bash man page, there is a special variable that is exactly what I'm looking for:
PROMPT_COMMAND
If set, the value is executed as a command prior to issuing each
primary prompt.
So we create a small function and add it to ~/.bashrc:
function exitstatus {
EXITSTATUS="$?"
BOLD="\[\033[1m\]"
RED="\[\033[1;31m\]"
OFF="\[\033[m\]"
if [ "$EXITSTATUS" -eq "0" ]
then
PS1="${BOLD}\u@\h:\w\$${OFF} "
else
PS1="${BOLD}\u@\h:\w${OFF}${RED}\$${OFF} "
fi
PS2="${BOLD}>${OFF} "
}
PROMPT_COMMAND=exitstatus
Fire up a new shell, and every command that has an exit status different than "0" puts a red marker in your prompt:
13 Oct 2007
12 Oct 2007
Bash prompt (on RedHat)
I've been working with a lot of different RHEL-boxes lately, and I've (yet again) been frustrated with the default RedHat Bash-prompt. It is an easy fix, but its tiresome to change every time.
Okay, the "trouble" is this:
[lars@titan ~]$
This is the default bash prompt. Now, thats fine enough, but lets jump to another directory.:
[lars@titan lib]$
Where am I now? Which directory is this? Hm?
Since the RedHat prompt only shows the current directory, and NOT the full path, it can be any number of directories:
Luckily, it is easy to change the prompt. Just add this to your ~/.bashrc
PS1='\u@\h:\w\$ '
PS2='> '
This gives you:
lars@dream:~$
And lets now jump to another directory:
lars@dream:/usr/local/lib$
See? No more 'pwd'! Finally a more sane and useful Bash prompt!
You can find more prompt variables in the Bash manual.
A slightly more fancy variant of the above, is to make the prompt bold:
BOLD="\[\033[1m\]"
OFF="\[\033[m\]"
PS1="${BOLD}\u@\h:\w \$${OFF} "
PS2="${BOLD}>${OFF} "
Just add it to your ~/.bashrc, and it will look like this:
lars@titan:~$
You can pimp your prompt with colors and all kinds off information. Read the Bash Prompt HOWTO for more.
Okay, the "trouble" is this:
[lars@titan ~]$
This is the default bash prompt. Now, thats fine enough, but lets jump to another directory.:
[lars@titan lib]$
Where am I now? Which directory is this? Hm?
Since the RedHat prompt only shows the current directory, and NOT the full path, it can be any number of directories:
- /lib
- /usr/lib/
- /usr/src/linux/lib/
- /usr/local/lib/
- /opt/lib
- /var/lib
- ~/lib
- ...
Luckily, it is easy to change the prompt. Just add this to your ~/.bashrc
PS1='\u@\h:\w\$ '
PS2='> '
This gives you:
lars@dream:~$
And lets now jump to another directory:
lars@dream:/usr/local/lib$
See? No more 'pwd'! Finally a more sane and useful Bash prompt!
You can find more prompt variables in the Bash manual.
A slightly more fancy variant of the above, is to make the prompt bold:
BOLD="\[\033[1m\]"
OFF="\[\033[m\]"
PS1="${BOLD}\u@\h:\w \$${OFF} "
PS2="${BOLD}>${OFF} "
Just add it to your ~/.bashrc, and it will look like this:
lars@titan:~$
You can pimp your prompt with colors and all kinds off information. Read the Bash Prompt HOWTO for more.
Subscribe to:
Posts (Atom)