端末が正しく梱包されていない[閉じる]

端末が正しく梱包されていない[閉じる]

私はSSH経由で私のサーバーに接続するためにGnome Terminalを使用しています。リモートサーバー(Ubuntu)のマイアカウントはbashを使用します。私のbashrcには、現在のgit分岐を含むようにシェルプロンプトを設定する行が含まれています(該当する場合)。

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

gitリポジトリに入ると、端末は正しくパッケージングを停止します。長いコマンドは、最初の行の先頭に改行するのではなく、2行目に改行してプロンプトの上に印刷を開始する必要があります。

私の作業ディレクトリがgitリポジトリ内にない限り(つまり、出力が空でない場合)、parse_git_branchパッケージングに問題はありません。

印刷できない文字について知っています。に含める必要\[があります。\]このように、シェル(またはターミナル?)はプロンプトの長さについて計算しないことを知っています。 「エクスポート」行がこの操作を正しく実行していると確信しています。しかし、私のregex-fuはsedコマンドが何をしているのか理解するのに十分強力ではなく、印刷できない文字を挿入するようには思えません。正しく。

この問題非常に似ています(同じparse_git_branch機能を使用してもここ)しかし、もう一つの問題は、プロンプトに絵文字があることに関連していますが、私の場合はそうではありません。

私のメッセージにどのような問題があるかを知っている人はいますか?

答え1

color=alwaysこれは、シェルプロンプトや機能によるものではなく、gitでuiオプションを有効にしたためですparse_git_branch。 "git Branch"コマンドは色付きで表示され、関数の元のparse_git_branch作者はそれを考慮せずに代わりにカラーコードが正しくオフにならないように文字列を切りました。

--no-color関数内の "git Branch"コマンドにフラグを追加するだけでparse_git_branch問題を解決するのに十分でしたが、実際には色に慣れているので、金色の背景を複製する方法は次のとおりです。

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

答え2

gitパッケージをインストールすると、ブランチチェック機能が組み込まれてインポ​​ートできるローカルファイルをインストールする必要があります。使ってみましたか?私はこれを使用することに問題はありません。これはRHELからのものなので、git-prompt.shはUbuntuの他の場所にあるかもしれません。ただ「git-prompt.shを探す」を実行してください。そうでなければ、ここにバージョンがあるようです。https://github.com/magicmonty/bash-git-prompt

. /usr/share/git-core/contrib/completion/git-prompt.sh
export PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '

関連情報