Estou tentando ter uma parte do meu prompt definido dinamicamente por uma função, então no meu .bashrc
eu tenho:
asdf ()
{
echo -n $(pwd)
}
PS1="\u@\h:\w $(asdf)\$ "
Abrir um shell me dá o que eu espero no começo:
$ bash
darthbith@server:~/test /home/darthbith/test$
No entanto, quando altero o diretório, a parte definida pela função não muda:
darthbith@server:~/test /home/darthbith/test$ cd ~/test2
darthbith@server:~/test2 /home/darthbith/test$
Meu objetivo real é usar o git-prompt.sh
script para mostrar a ramificação do meu repositório git quando estou em uma com cores bonitas e tudo, mas o problema é que ele nunca atualiza o nome da ramificação quando troco de repositório. O exemplo trivial acima é a reprodução mais simples que eu poderia apresentar para minha pergunta.
As .bashrc
linhas que eu tenho para integrar o script git-prompt:
source ~/.git-prompt.sh
PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1)\$ "
Respostas:
De acordo com o prompt do Bash Howto :
fonte
Quando você usou
$(..)
aspas duplas, o shell avaliou a substituição de comandos antes de atribuir aPS1
. Assim,PS1
continha apenas a saída, não a própria substituição de comando. Em vez disso, use aspas simples ou escape do$
, para que a cadeia seja passada como está ePS1
, em seguida, avaliada quando o prompt estiver definido:Comparar:
fonte