Elementos dynamics en bash PS1

He puesto lo siguiente en mi file ~ / .localsh para personalizar mi prompt bash cuando trabajo con git.

Básicamente, quiero que se muestre la twig actual en mi terminal. La herramienta gitk muestra twigs con background verde y primer plano en negro, así que eso es lo que estoy tratando de hacer.

Lo que tengo funciona, pero cuando presiono la flecha hacia arriba en el keyboard para retroceder a través de los commands anteriores, se sobrescribe.

Esto ha sucedido antes, cuando no terminé una secuencia de colors con [\ e [0m]. Ahora me está sucediendo por llamar a la function getgitbranch. Creo que tiene algo que ver con el terminal sin saber cuánto time es el post.

Entonces, aquí está la pregunta … ¿Cómo uso correctamente los elementos dynamics en mi prompt de bash y no lo arreglo con mangueras cuando uso las flechas hacia arriba?

function getgitbranch() { git branch | grep "^\*" | cut -c3- } function blabla() { PS1="" PS1="$PS1\[\e[0;30m\]\[\e[42m\]\[\$(getgitbranch)\]\[\e[0;49m\]\[\e[0m\] " PS1="$PS1\[\e[1;35m\][\[\e[0m\]" PS1="$PS1\[\e[1;33m\]\w\[\e[0m\]" PS1="$PS1\[\e[1;35m\]]\[\e[0m\]" PS1="$PS1 \[\e[1;31m\]>\[\e[0m\] " export PS1 } 

Elimina el \[\] de alnetworkingedor de $(getgitbranch) . Los caracteres emitidos por esa function en realidad ocupan espacio en la pantalla, por lo que quiere que Bash los explique. El uso de \[\] dice que no count los caracteres que aparecen dentro.