2013-07-23 151 views
9

我能夠在shell提示符下顯示git分支名稱。但是,無論何時我使用屏幕我越來越提示中的Git分支名稱

bash: parse_git_branch: command not found 

和git分支未顯示。 請幫我在屏幕會話中得到這個。

我在我的.bash_profile中有以下內容。

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

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

我沒有.git-completion.bash

系統規格:

  • OS:OSX 10.8.4
  • 終端& iTerm2
  • 屏幕版本:4.00.03( FAU)23-Oct-06
+0

你如何自定義提示時,曾在OS X海伊謝拉同樣的錯誤?你可以給你的PS1的字符串? –

+0

'.git-completion.bash'文件來源於您的主外殼(即沒有屏幕?) –

回答

1

你在你的sed語句的末尾缺少一個'

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

Othewerise,似乎對我bash-3.2

+0

不幸的是它不適用於我。我還需要在screenrc中添加一些東西嗎? – user2610733

+0

你還在收到「command not found」的訊息嗎?你還有什麼你的.bash_profile?爲了好玩,可以嘗試在你的''.bash_profile''''testFunc()echo「test!」中加入一個測試函數。 「並調用它。 –

+4

我解決了它。一旦我在屏幕上,我使用'source〜/ .bash_profile'。它帶回了所有的設置。謝謝您的幫助。 – user2610733

2

工作這是更簡單,避免不必要的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

我在屏幕下運行時遇到了同樣的問題,並且能夠通過將parse_git_branch()函數的定義從.bash_profile.bashrc

+0

它可以從'.bash_profile'移動或複製到'.bashrc'。我通過複製函數解決了這個問題。 –

5

當您打開您的終端時,執行.bash_profile,因此定義了PS1。然後執行屏幕,屏幕讀取環境變量PS1,其中包括對parse_git_branch的調用並嘗試解析它。但是,由於屏幕沒有執行.bash_profile屏幕內沒有定義功能parse_git_branch

PS1的定義移動到.bashrc,因爲屏幕和iTerm都執行它。

1

我切換到root或開始ssh-agent /bin/bash當我解決它把它放在/etc/bashrc與檢查,如果我的根

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