¿Ejecutar comandos en PS1 en macOS Sierra no funciona?

3

Recientemente tuve que cambiar a una Mac para mi trabajo. Ya que estoy acostumbrado a los entornos similares a Unix, traje mi generador de avisos PS1 de Ubuntu.

Tuve suficientes problemas para personalizar el terminal para que pareciera algo utilizable (¿quién pensó que las letras negras sobre fondo blanco son una solución aceptable en 2017?). Sin embargo, una cosa no funcionará ...

Es decir, la extensión git ps1. Sí, instalé los paquetes bash-completed y git a través de Homebrew, y obtuve tanto git-completed.bash como git-prompt.sh antes de asignar PS1.

Mi .bash_profile tiene este aspecto:

build_prompt () {
  clear="\[$(tput sgr0)\]"
  blue="\[3[38;5;27m\]"
  green="\[3[38;5;2m\]"
  yellow="\[3[38;5;11m\]"

  export PS1="[${blue}\u${clear}@${green}\h${clear}] ${yellow}\w${clear}$(__git_ps1 " (%s)") \$ > "
} 


source /usr/local/etc/bash_completion.d/git-completion.bash
source /usr/local/etc/bash_completion.d/git-prompt.sh

export GIT_PS1_SHOWDIRTYSTATE=yes
export GIT_PS1_SHOWCOLORHINTS=true
export CLICOLOR=1

alias ls='ls -GFhAl'
build_prompt

Como puede ver, agrego __git_ps1 al final de mi valor de PS1, y en teoría debería mostrar la información del árbol Git cada vez que esté en una carpeta de repositorio git.

Sin embargo, esta secuencia de comandos solo se ejecuta una vez, cuando se inicia bash. Sin embargo, el mismo código funciona bien en Ubuntu, y muestra dinámicamente la información del árbol git sin importar dónde comience bash. Sin embargo, en esta Mac, solo muestra el valor que toma al iniciarse, por lo que si comienzo un indicador de bash en una carpeta de git, me quedaré atascado con su pantalla de información hasta que cierre la instancia del terminal.

¿Qué estoy haciendo mal aquí?

    
pregunta fonix232 19.07.2017 - 13:35

1 respuesta

1

Con un caso de prueba mínimo (menos, por supuesto, los colores frívolos) parece que la cotización de PS1 es importante:

gitfoo () {
    echo >&2 "was run"
    git status -bs 2>/dev/null | head -1
}
#PS1="x$(gitfoo)x "
PS1='x$(gitfoo)x '
    
respondido por el thrig 19.07.2017 - 16:34

Lea otras preguntas en las etiquetas