Esecuzione di comandi in PS1 su macOS Sierra non funziona?

3

Recentemente ho dovuto passare a un Mac per il mio lavoro. Dato che sono abituato agli ambienti Unix, ho portato il mio generatore di prompt PS1 da Ubuntu.

Ho avuto abbastanza problemi nel personalizzare il terminale per renderlo un po 'usabile (chi pensava che le lettere nere su sfondo bianco siano una soluzione accettabile nel 2017?). Comunque una cosa non funzionerà ...

Vale a dire, l'estensione git ps1. Sì, ho installato i pacchetti bash-completion e git tramite Homebrew e ho acquistato sia git-completion.bash che git-prompt.sh prima di assegnare PS1.

Il mio .bash_profile assomiglia a questo:

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

Come puoi vedere aggiungo il __git_ps1 alla fine del mio valore PS1, e in teoria dovrebbe visualizzare le informazioni dell'albero Git ogni volta che si trova in una cartella di repository git.

Tuttavia questo script viene eseguito una volta sola, quando bash si avvia. Lo stesso codice funziona comunque su Ubuntu bene, visualizzando dinamicamente le informazioni dell'albero git indipendentemente da dove comincio bash. Su questo Mac, tuttavia, visualizza solo il valore che preleva all'avvio, quindi se avvio un prompt di bash in una cartella git, rimarrò bloccato con il suo display informativo fino a quando non chiudo l'istanza del terminale.

Che cosa sto facendo male qui?

    
posta fonix232 19.07.2017 - 13:35
fonte

1 risposta

1

Con un caso di test minimale (meno, ovviamente, i colori frivoli) sembra che la citazione di PS1 sia importante:

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

Leggi altre domande sui tag