Bash 프롬프트에서 자식 분기를 색상으로 표시하려면 어떻게합니까?


108

git 저장소에서 작업 할 때이 안내서 를 사용하여 그놈 터미널 (Ubuntu 15.10)에 지점 이름을 표시합니다. 위의 내용을 기반으로 ~ / .bashrc 파일에 아래 내용이 있습니다.

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes 

...

# Add git branch if its present to PS1
parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
unset color_prompt force_color_prompt

결과적으로 나는 지금 얻는다 :

여기에 이미지 설명을 입력하십시오

그래서 작동합니다 . 그런데 왜 내 user @ host의 채색이 제거 되었습니까? 또한 지점 이름에 색상을 지정해야합니다. 다음과 같이 보이기 전에 :

여기에 이미지 설명을 입력하십시오

업데이트 : 이제이 안내서를 대신 시도했습니다.

https://coderwall.com/p/fasnya/add-git-branch-name-to-bash-prompt

이것을 .bashrc에 추가 :

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "

그리고 그것은 작동합니다 :

여기에 이미지 설명을 입력하십시오

.bashrc에는 다음도 있습니다 (기본값).

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

스 니펫이 올바른 결과를 제공하고 다른 버전은 그렇지 않은 이유를 아직 찾지 못했습니다. 이것에 대한 입력?

작동하지 않는 이전 코드 조각을 사용하는 내 .bashrc 버전은 다음과 같습니다.

http://pastebin.com/M8kjEiH3


force_color_prompt이전에 주석 이 제거 되었습니까 ?
muru

예, 주석 처리되지 않은 것과 동일한 결과를 언급했습니다. 위에 게시 된 가이드는 주석 처리되어야한다고 말합니다.
u123

당신은 당신의 완전한 게시 할 수 있습니까 .bashrc? IIRC는 기본적으로 .bashrc컬러 프롬프트를 활성화하지 않으므로 컬러를 표시하도록 컬러 프롬프트를 변경해야합니다. 변경 한 내용에 따라 다릅니다.
muru

1
주석 처리 force_color_prompt가 도움이되지 않은 이유를 알려주는 64 행을보십시오 .
muru

2
@ u123은 기본값에 대해 .bashrc너무 걱정하지 않습니다 . 엉망인 경우 언제든지에서 원본을 얻을 수 있습니다 /etc/skel/.bashrc.
muru

답변:


121

이 스 니펫 :

# Add git branch if its present to PS1

parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi

기본 프롬프트 정의 를 대체 합니다.

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

어느 것으로 끝나는가 :

unset color_prompt force_color_prompt

.bashrc당신이 게시는 당신이 그것을 추가하는 표시 한 후 기본 프롬프트 정의와 unset color_prompt force_color_prompt(라인 # 64).

어느 교체 니펫으로 기본 프롬프트 정의 또는를두고 ~/.bashrc그대로와 함께 기본 프롬프트 정의를 언급 unset color_prompt force_color_prompt라인 # 64 :


따라서 .bashrc의 일부는 다음과 같이 보일 수 있습니다

parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\] $(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
# THE SIX LINES BELOW are the default prompt and the unset (which were in the original .bashrc)
#if [ "$color_prompt" = yes ]; then
#    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
#else
#    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
#fi
#unset color_prompt force_color_prompt

스크린 소트


위의 내용을 확인한 후 정확합니다. bashrc 파일의 기본 부분을 수정하지 않고도 작동하므로 새로운 버전의 코드 조각을 사용합니다.
u123

1
분기 이름에 색상을 추가하지 못합니다.
Avinash Raj

기본의 사본을 테스트 @AvinashRaj ~/.bashrc/etc/skel/.bashrc, 당신은 당신에 방해 뭔가가있을 수 있습니다 ~/.bashrc.
kos

색상이 보이지 않으면 force_color_prompt = yes (행 번호 48)를 주석 해제하십시오.
Adil Abbasi

1
상태에 따라 브랜치를 채색하기 위해 git 자체에서 제공 하는 기본 git-prompt 스크립트를 사용할 수 있습니다 .
Niket Pathak

60

우분투 : 터미널에 지점 이름 표시

~ / .bashrc 파일에이 줄을 추가하십시오

# Show git branch name
force_color_prompt=yes
color_prompt=yes
parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
unset color_prompt force_color_prompt

이 명령으로 .bashrc 파일을 다시로드하십시오.

$ source ~/.bashrc

5
이것은 18.04에 나를 위해 일했습니다!
cbloss793

1
감사. 사용 : 우분투 18.04.1 LTS
Bishwas Mishra

그것은 초등학교 OS 0.4 Loki에서도 나를 위해 일했습니다. 명령으로 내 ~ / .bashrc를 여는 것만 큼 간단 sudo nano ~/.bashrc합니다. 파일 끝에 코드를 복사하고 저장 한 다음 위의 코드로 ~ / .bashrc를 종료하고 다시로드하십시오. 감사합니다;)
Juan Gómez Carrillo

Redhat 6.8에서 작동합니다!
BeeGee

1
이것은 효과가 있었고 색상을 유지했습니다! (우분투 18.04)
warkentien

10

지금은이 https://gist.github.com/eliotsykes/47516b877f5a4f7cd52f에 따라 작업하고 지금까지 좋아하지만 추가로 사용자 정의 할 계획입니다.

터미널에서

mkdir ~/.bash

원시 git-prompt.sh파일을 git contrib에서 https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh~/.bash 디렉토리로 복사 하십시오.

내부 ~/.bashrc또는 ~/.bash_profile(일반적으로 bash 사용자 정의 / 설정을 넣는 파일 선택) 행을 추가하십시오.

source ~/.bash/git-prompt.sh # Show git branch name at command prompt
export GIT_PS1_SHOWCOLORHINTS=true # Option for git-prompt.sh to show branch name in color

# Terminal Prompt:
# Include git branch, use PROMPT_COMMAND (not PS1) to get color output (see git-prompt.sh for more)
export PROMPT_COMMAND='__git_ps1 "\w" "\n\\\$ "' # Git branch (relies on git-prompt.sh)

자식 저장소에있는 한 Bash 프롬프트는 커밋되지 않은 변경 사항이 있는지를 나타내는 현재 자식 분기를 색상으로 표시해야합니다.


쉽고 일하는!
다니

명확하고 간결하며 작업을 수행하며 다른 플랫폼에서도 작동하므로 허용되는 답변이어야합니다.
miguelmorin

2

홈 폴더로 이동

숨겨진 파일을 표시하려면 Ctrl+ h를 클릭하십시오 .

열다 . bashrc파일을 작성하고 마지막에 다음을 붙여 넣습니다.

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "

터미널을 연 경우 닫았다가 다시여십시오. 즐겨!!


안녕하세요, 시도해 보았습니다. 수퍼 유저를 전환 한 곳에서만 작동합니다. 항상 활성화하는 방법을 알려주시겠습니까?
Denis Stephanov

0

내 문제는 옵션을 활성화하지 않았다는 것입니다.

로그인 쉘과 같은 실행 명령

터미널편집프로파일 환경 설정명령


0

바꾸다

parse_git_branch

parse_git_branch 2>/dev/null

PS1 정의에서 행복하게 살 수 있습니다.


0

아래 행을 다음에 추가하십시오 ~/.bashrc.

export GIT_PS1_SHOWDIRTYSTATE=true
export GIT_PS1_SHOWUNTRACKEDFILES=true

export PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.