Bash Prompt HOWTO:
Prev | Chapter 4. External Commands | Next

# 4.1. PROMPT_COMMAND

Bash provides an environment variable called `PROMPT_COMMAND`. The contents of this variable are executed as a regular Bash command just before Bash displays a prompt.

    [21:55:01][giles@nikola:~] PS1="[\u@\h:\w]\$ "
    [giles@nikola:~] PROMPT_COMMAND="date +%H%M"
    2155
    [giles@nikola:~] d
    bin   mail
    2156
    [giles@nikola:~]

What happened above was that I changed PS1 to no longer include the `\t` escape sequence (added in a previous section), so the time was no longer a part of the prompt. Then I used `date +%H%M` to display the time in a format I like better. But it appears on a different line than the prompt. Tidying this up using `echo -n ...` as shown below works with Bash 2.0+, but appears not to work with Bash 1.14.7: apparently the prompt is drawn in a different way, and the following method results in overlapping text.

    2156
    [giles@nikola:~] PROMPT_COMMAND="echo -n [$(date +%H%M)]"
    [2156][giles@nikola:~]$
    [2156][giles@nikola:~]$ d
    bin   mail
    [2157][giles@nikola:~]$ unset PROMPT_COMMAND
    [giles@nikola:~]

`echo -n ...` controls the output of the date command and suppresses the trailing newline, allowing the prompt to appear all on one line. At the end, I used the unset command to remove the `PROMPT_COMMAND` environment variable.

Prev | Home | Next
External Commands | Up | External Commands in the Prompt