Estoy tratando de tener una parte de mi indicador configurada dinámicamente por una función, así que en mi .bashrc
tengo:
asdf ()
{
echo -n $(pwd)
}
PS1="\u@\h:\w $(asdf)\$ "
Abrir un caparazón me da lo que espero al principio:
$ bash
darthbith@server:~/test /home/darthbith/test$
Sin embargo, cuando cambio el directorio, la parte definida por la función no cambia:
darthbith@server:~/test /home/darthbith/test$ cd ~/test2
darthbith@server:~/test2 /home/darthbith/test$
Mi objetivo real es usar el git-prompt.sh
script para mostrar la rama de mi repositorio git cuando estoy en uno con bonitos colores y todo, pero el problema es que nunca actualiza el nombre de la rama cuando cambio los repositorios. El ejemplo trivial anterior es la reproducción más simple que se me ocurrió para mi pregunta.
Las .bashrc
líneas que tengo para integrar el script git-prompt:
source ~/.git-prompt.sh
PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1)\$ "
Respuestas:
De acuerdo con Bash prompt Howto :
fuente
Cuando lo usó
$(..)
entre comillas dobles, el shell evaluó la sustitución del comando antes de asignarloPS1
. Por lo tanto,PS1
contenía solo la salida, no la sustitución del comando en sí. En su lugar, use comillas simples o escape de$
, para que la cadena se pase como estáPS1
y luego se evalúe cuando se establezca la solicitud:Comparar:
fuente