カスタム .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 ];(行 70 付近)を見つけてください.bashrc

実際には次のようになります:

ここに画像の説明を入力してください

  • 注: 私は Ubuntu Server に接続するために Kali Linux 内の GNOME ターミナルを使用しています。そのため、Ubuntu で同じコードによって生成される色とは若干色が異なります。

参考文献:

関連情報