30

I can set an environment variable inside the bash prompt like this:

export PS1="[\u@\H/$FOO \W]\$ "

The prompt does not change when I change the environment variable: $FOO because the $FOO variable is not interpreted.

I can work around it by doing the following, exporting PS1 again. But I would like to be able to do it on one line:

[user@server ]$ echo $FOO
foo
[user@server ]$ export PS1="[$FOO]$ "
[foo]$ export FOO=bla
[bla]$ 

Can this be done in one line?

Eric Leschinski
  • 146,994
  • 96
  • 417
  • 335
Bernd
  • 1,201
  • 3
  • 12
  • 10

2 Answers2

43

you need to add backslash to get it evaluated not in the time of FOO assigment but during evaluating the PS1, so do:

export PS1="[\$FOO]$ "

instead of:

export PS1="[$FOO]$ "

Note the \ before the $FOO.

Michał Šrajer
  • 30,364
  • 7
  • 62
  • 85
18

Try setting the PROMPT_COMMAND variable:

prompt() {
    PS1="[$FOO]$ "
}

PROMPT_COMMAND=prompt

From http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x264.html:

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.

Arnaud Le Blanc
  • 98,321
  • 23
  • 206
  • 194