PS1の関数出力としてのBashエコーカラー


0

PS1にブランチを表示し(gitフォルダーにいる場合)、作業ディレクトリが汚れている場合はブランチを赤で、きれいな場合はブルーでブランチを着色します。ここに私が思いついたものがあります

IBlack='\e[0;90m'       # Nero
IRed='\e[0;91m'         # Rosso
IGreen='\e[0;92m'       # Verde
IYellow='\e[0;93m'      # Giallo
IBlue='\e[0;94m'        # Blu
IPurple='\e[0;95m'      # Viola
ICyan='\e[0;96m'        # Ciano
IWhite='\e[0;97m'       # Bianco

parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
branch_color() {
    if git status | grep --quiet "nothing to commit"; then
        echo -e "$IBlue"
    else
        echo -e "$IRed"

    fi
}


PS1="\[$IGreen\]\u \[$ICyan\][\W]\[\$(branch_color)\]\$(parse_git_branch)\[$IWhite\] \n → "

今、コードはこれを印刷します:

francesco [demo_app]\e[0;94m (master) 

ここで、francescoはユーザー名、demo_appはフォルダー、masterはブランチです。作業ディレクトリにファイルを作成すると、シーケンス\ e [0; 94mが変更されますが、色は解析されません。

次に、PS1を次のように変更しようとしました。

PS1="\[$IGreen\]\u \[$ICyan\][\W]\[$(branch_color)\]\$(parse_git_branch)\[$IWhite\] \n → "

(branch_color)の前の '\'を削除すると、色を解析しますが、作業ディレクトリのステータスが変わっても変わりません。

どうすれば解決できますか?はっきりしない場合は申し訳ありません。

フランチェスコ


申し訳ありませんが、ブレインバグ、質問に今すぐ答えてはいけません。答えは実際にはまったく同じでした\e[0;94m (master)が、おそらく構文エラーが原因で削除しました。
テルドン14年

あなたのシステムはどれですか?鉱山ではまだ機能しないためです。色を解析する代わりにプロンプ​​トで文字列として出力します(私はOSX 10.9.1を使用しています)
フランチェスコザッファローニ14年

ああ、私はLinuxを使っています。echo実装の違いかもしれませんが、より安全printfになる傾向があります。2つのエコーがで呼び出す交換してみてくださいとしてbranch_color()printf "\e[0;94m"printf "\e[0;91m"
terdon

うまくいったマーン!ありがとうございました!(回答として投稿してください。)
フランチェスコザッファローニ14年

すばらしいです!回答を投稿しました。
テルドン14年

回答:


0

あなたが持っているコードは私のDebianで完璧に動作します。あなたの問題は、OSX echoがエスケープシーケンスを正しく印刷していないことです。

一般に、システムごとに実装が異なり、スクリプトの移植性に影響を与えたり、他の問題を引き起こす可能性があるためechoprintf代わりに回避して使用するechoことをお勧めします。詳細については、こちらをご覧ください。

とにかく、echo関数のsを `printfに置き換えてみてください:

branch_color() {
    if git status 2>/dev/null | grep --quiet "nothing to commit"; then
        printf "\e[0;94m"
    else
        printf "\e[0;91m"

    fi
}
PS1="\[$IGreen\]\u \[$ICyan\][\W]\[\$(branch_color)\]\$(parse_git_branch)\[$IWhite\] \n → "



PS1="\[$IGreen\]\u \[$ICyan\][\W]\[\$(branch_color)\]\$(parse_git_branch)\[$IWhite\] \n → "

素晴らしい、答えを選びました、ty
フランチェスコ・ザファローニ14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.