Why is my function not re-evaluated in PS1?
Solution 1
According to Bash prompt Howto:
[21:58:33][giles@nikola:~]$ PS1="[\$(date +%H%M)][\u@\h:\w]\$ " [2159][giles@nikola:~]$ ls bin mail [2200][giles@nikola:~]$
It's important to notice the backslash before the dollar sign of the command substitution. Without it, the external command is executed exactly once: when the PS1 string is read into the environment.
Solution 2
When you used $(..)
in double-quotes, the shell evaluated the command substitution before assigning to PS1
. Thus, PS1
contained only the output, not the command substitution itself. Instead, either use single-quotes, or escape the $
, so that the string is passed as-is to PS1
, and then evaluated when the prompt is set:
$ PS1='$(pwd) $ '
/tmp $ cd /var
/var $ echo "$PS1"
$(pwd) $
Compare:
/var $ PS1="$(pwd) $ "
/var $ echo "$PS1"
a /var $ a
/var $
Related videos on Youtube
darthbith
Updated on September 18, 2022Comments
-
darthbith over 1 year
I'm trying to have a part of my prompt set dynamically by a function, so in my
.bashrc
I have:asdf () { echo -n $(pwd) } PS1="\u@\h:\w $(asdf)\$ "
Opening a shell gives me what I expect at first:
$ bash darthbith@server:~/test /home/darthbith/test$
However, when I change directory, the part defined by the function doesn't change:
darthbith@server:~/test /home/darthbith/test$ cd ~/test2 darthbith@server:~/test2 /home/darthbith/test$
My actual goal is to use the
git-prompt.sh
script to show the branch of my git repository when I'm in one with pretty colors and everything, but the problem is that it never updates the branch name when I change repositories. The trivial example above is the simplest reproduction I could come up with for my question.The
.bashrc
lines that I have to integrate the git-prompt script:source ~/.git-prompt.sh PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1)\$ "
-
mgor almost 9 yearsOn a side note, if you want a git prompt I would recommend github.com/magicmonty/bash-git-prompt/blob/master/README.md
-
-
darthbith almost 9 yearsThank you! Now if only I could get it to print the colors instead of the escape sequences returned from the function...