2013-07-23 46 views
9

Tôi có thể hiển thị tên chi nhánh git trong dấu nhắc trình bao. Nhưng bất cứ khi nào tôi sử dụng màn hình, tôi nhận đượcTên chi nhánh Git trong dấu nhắc

bash: parse_git_branch: command not found 

và chi nhánh git không được hiển thị. Xin vui lòng giúp tôi có được điều này trong các phiên màn hình cũng có.

Tôi đã theo dõi trong .bash_profile của mình.

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

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

Tôi không có .git-completion.bash

Hệ thống thông số kỹ thuật:

  • OS: OSX 10.8.4
  • ga & iTerm2
  • phiên bản
  • màn hình: 4.00.03 (FAU) 23-Oct-06
+0

How are you tùy biến nhanh chóng của bạn? Bạn có thể cho chuỗi PS1 của bạn? –

+0

Tệp '.git-completion.bash' có nguồn gốc ở đâu trong vỏ chính của bạn (nghĩa là không có màn hình?) –

Trả lời

1

Bạn đang thiếu một ' ở phần cuối của câu sed của bạn:

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

Othewerise, có vẻ như để làm việc cho tôi trong bash-3.2

+0

không may là nó không hoạt động đối với tôi. Tôi có phải thêm một cái gì đó trong screenrc quá? – user2610733

+0

bạn vẫn nhận được thông báo "lệnh không tìm thấy"? Bạn có gì khác trong tệp .bash_profile của mình? Để giải trí, hãy thử đặt một hàm thử nghiệm vào '' .bash_profile'' '' testFunc() { \t echo "test!" } '' và gọi nó. –

+4

Tôi đã giải quyết nó. khi tôi đang ở màn hình, tôi sử dụng 'source ~/.bash_profile'. Nó mang lại tất cả các thiết lập trở lại. Cảm ơn đã giúp đỡ. – user2610733

2

Đây là đơn giản hơn nhiều và tránh không cần thiết 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

Tôi gặp sự cố tương tự khi chạy dưới màn hình và có thể giải quyết bằng cách di chuyển định nghĩa của hàm parse_git_branch() từ .bash_profile đến .bashrc.

+0

Có thể di chuyển hoặc sao chép từ '.bash_profile' sang' .bashrc'. Tôi đã giải quyết vấn đề này bằng cách sao chép hàm. –

5

Khi bạn mở thiết bị đầu cuối, .bash_profile được thực thi và do đó, PS1 được xác định. Sau đó, bạn thực hiện màn hình và màn hình đọc biến môi trường PS1 bao gồm một cuộc gọi đến parse_git_branch và cố gắng phân tích cú pháp đó. Tuy nhiên, vì màn hình không thực thi .bash_profile, chức năng parse_git_branch không được xác định bên trong màn hình.

Di chuyển định nghĩa PS1 sang .bashrc vì cả màn hình và iTerm đều thực thi.

1

tôi đã có lỗi tương tự trong OS X High Sierra khi chuyển sang thư mục gốc hoặc khi bắt đầu ssh-agent /bin/bash tôi giải quyết nó để đặt nó trong /etc/bashrc với kiểm tra, nếu i am gốc

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