2013-07-23 16 views
9

Sono in grado di mostrare il nome del ramo git nel prompt della shell. Ma ogni volta che sto usando lo schermo sto ricevendoNome ramo Git nel prompt

bash: parse_git_branch: command not found 

e il ramo git non è mostrato. Per favore aiutami a ottenere questo nelle sessioni dello schermo anche.

Ho seguito nel mio .bash_profile.

parse_git_branch() { 
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/ 
} 

export PS1="[\W\$(parse_git_branch)]$ " 

Non ho .git-completion.bash

specifiche di sistema:

  • OS: OSX 10.8.4
  • Terminal & iTerm2
  • versione
  • schermo: 4.00.03 (FAU) 23-Oct-06
+0

Come stai personalizzando il prompt? Potresti dare la tua stringa PS1? –

+0

Dove si trova il file '.git-completion.bash' nella shell principale (ad esempio senza schermo?) –

risposta

1

ti manca un ' alla fine della sua dichiarazione sed:

parse_git_branch() { 
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/' 
} 
export PS1="[\W\$(parse_git_branch)]$ " 

Othewerise, sembra funzionare per me in bash-3.2

+0

sfortunatamente non funziona per me. Devo aggiungere qualcosa anche nello screenrc? – user2610733

+0

stai ancora ricevendo il messaggio "comando non trovato"? Cos'altro hai nel tuo .bash_profile? Per divertimento, prova a mettere una funzione di test nel tuo '' .bash_profile'' '' testFunc() { \t echo "test!" } '' e chiamandolo. –

+4

L'ho risolto. una volta che sono sullo schermo, uso 'source ~/.bash_profile'. Riporta tutte le impostazioni. Grazie per l'aiuto. – user2610733

2

Questo è molto più semplice ed evita il superfluo sed:

parse_git_branch() { 

    while read -r branch; do 
     [[ $branch = \** ]] && current_branch=${branch#* } 
    done < <(git branch 2>/dev/null) 

    [[ $current_branch ]] && printf ' [%s]' "$current_branch" 

} 
5

Ho avuto lo stesso problema durante l'esecuzione sotto lo schermo ed è stato in grado di risolvere spostando la definizione della funzione parse_git_branch() daDaa .bashrc.

+0

Può essere spostato o copiato da '.bash_profile' a' .bashrc'. Ho risolto questo problema copiando la funzione. –

5

All'apertura del terminale, .bash_profile viene eseguito e pertanto è definito PS1. Quindi si esegue la schermata e lo schermo legge la variabile di ambiente PS1 che include una chiamata a parse_git_branch e tenta di analizzarla. Ma poiché lo schermo non ha eseguito .bash_profile la funzione parse_git_branch non è definita all'interno dello schermo.

Spostare la definizione di PS1 a .bashrc poiché entrambi, lo schermo e iTerm lo eseguono.

1

ho avuto lo stesso errore in OS X High Sierra quando si passa a root o quando si inizia a ssh-agent /bin/bash decisi a metterlo in /etc/bashrc con controllo se io sono radice

if [[ $UID == 0 ]]; then 
     PS1="\[\e[1;31;40m\]\[email protected]\h \W\[\e[0m\]\$ " 
else 
     parse_git_branch() { 
       git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/' 
     } 
     PS1="\[email protected]\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ " 
fi 
Problemi correlati