사용자 정의 .profile 스크립트를 사용하여 Ubuntu 터미널 내부에서 Git 분기를 대괄호로 표시합니다.

사용자 정의 .profile 스크립트를 사용하여 Ubuntu 터미널 내부에서 Git 분기를 대괄호로 표시합니다.

.profile다음과 같은 사용자 정의 스크립트 가 있습니다 .

PS1='\[\033]0;WSL2 Bash\W\007\]' # set window title
PS1="$PS1"'\n'                 # new line
PS1="$PS1"'\[\033[36m\]'       # change to green
PS1="$PS1"'bash@bexgboost '         # user@host<space>
PS1="$PS1"'\[\033[31m\]'       # change to brownish yellow
PS1="$PS1"'\W'                 # current working directory
if test -z "$WINELOADERNOEXEC"
then
    GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
    COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
    COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
    COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
    if test -f "$COMPLETION_PATH/git-prompt.sh"
    then
        . "$COMPLETION_PATH/git-completion.bash"
        . "$COMPLETION_PATH/git-prompt.sh"
        PS1="$PS1"'\[\033[35m\]'  # change color to cyan
        PS1="$PS1"'`__git_ps1`'   # bash function
    fi
fi

PS1="$PS1"'\[\033[0m\]'        # change color
PS1="$PS1"'\n'                 # new line
PS1="$PS1"'$ '                 # prompt: always $

현재 터미널을 실행하면 다음과 같습니다.

여기에 이미지 설명을 입력하세요

스크립트는 다음과 같은 지점 이름을 표시해야 했습니다.

여기에 이미지 설명을 입력하세요

디렉터리 이름의 불일치를 무시합니다.

내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변1

코드의 문제는 18행에 있습니다.

PS1="$PS1"'`__git_ps1`'   # bash function

여기서는 함수를 호출하고 __git_ps1해당 함수를 해당 출력으로 바꿔야 하는 명령 대체(백틱을 사용한 이전 스타일)를 사용하고 있지만 예제 코드에서는 함수 정의를 볼 수 없습니다. 따라서 해당 줄 앞 어딘가에 다음 함수 정의를 추가할 수 있을 것 같습니다.

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

그런 다음 프로필 파일(-)을 저장하고 소싱 . .profile하면 작동합니다.


또한 다음은 Ubuntu Server 22.04의 기본 ~/.bashrc파일(이 경우 대신 이 파일을 편집하는 것을 선호함 .profile)을 변경하여 원하는 모양과 거의 동일하게 만드는 작업 예입니다. 여기서는 새로운 명령 대체 구문을 사용하고 있습니다 $(). 그리고 함수는 parse_git_branch()호출되기 전에 정의됩니다.

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[00m\]' # green
    #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;33m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]' # yellow
    #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;34m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]' # blue
     PS1='${debian_chroot:+($debian_chroot)}\[\033[01;35m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]' # purple
    #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]' # red

     PS1="${PS1}\[\033[01;33m\]\$(parse_git_branch)\[\033[0m\]\n" # HERE WE CALL THE FUNCTION THAT PARSE THE BRANCH
     PS1="${PS1}\$ "
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

관련 행만 .bashrc표시됩니다. 기본 상태의 if [ "$color_prompt" = yes ];경우 .bashrc.

실제 모습은 다음과 같습니다.

여기에 이미지 설명을 입력하세요

  • 참고 저는 Kali Linux 내에서 GNOME 터미널을 사용하여 Ubuntu Server에 연결하고 있는데 이것이 Ubuntu에서 동일한 코드로 생성되는 색상과 약간 다른 이유입니다.

참고자료:

관련 정보