時計の使用時にgit色が表示されないのはなぜですか?


10

実行するgit status -sbと私は見る:

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

watch(procps-ng 3.3.3から)リポジトリにしたい。--colorオプションは色を保つことになっています。


興味深いことに、それはで動作しlsます:

$ watch --color "ls --color"

表示中:

lsからの出力


ただしgit、色が消える場合:

$ watch --color "git status -sb"

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


それでは、出力watchからlsではなくgit出力から色を表示するのはなぜですか?



@Jobin、ありがとう、この質問を投稿する前に実際にそのリンクでコメントしました:)
Drew Noakes

回答:


5

次のことが当てはまります。

  • watch新しいシェルでコマンドを実行しshます。
  • .bashrc別名lsとしては、ls --color=auto色を有効にします。
  • shbashエイリアスを継承または使用しません。

したがって、watch実行時lsに色を要求するのではなく、単純に古いバージョンを実行します。これを回避することはできますが、adityaが指摘しているようにwatch、適切に処理するには色を有効にする必要があります。

の実用的な例lsは次のとおりです。

watch --color -- ls --color=always

あなたは合格しない場合は--color見て、あなたはインライン醜いカラーコードの束が表示されます。


ls --colorとして解釈されls --color=alwaysます。

ls --color=auto 時計で色を印刷しません。これは、端末自体からカラーサポートを推測していることを示しています。

理由の詳細については、時計のシェルが実際の端末と見なしているかどうかテストできます

$ bash -c '[[ -t 1 ]] && echo "real terminal"'
real terminal

$ watch -- "bash -c '[[ -t 1 ]] && echo "real terminal"'"
# ... nothing.

一部のアプリケーションは、色をオンにする必要があるかどうかを判断するためにその(または同様の)ものを見ているのではないかと思います。


3
しかしOPはgit status -sb、で動作するにもかかわらず、これが動作しない理由を知りたいと考えていますls --color
ジョビン14

意味あり。ただし、のエイリアスはありませんgit。色付けはgitの構成内で直接設定されます。したがって、これはエイリアシングの問題ではないようです。
Drew Noakes、

ビンゴ。私はauto、あなたが正しく推測したように、gitがカラー出力を回避するように私の色を設定しました。always代わりにを使用すると、この問題が解決しました。どうもありがとう!
ドリューノークス

9

git 設定値を使用して、カラー出力を表示するかどうかを決定します。

例えば:

git config --global color.ui auto

これにより、カラー設定がautoグローバルに設定されます。ではautoモード、Gitはオリが示唆したように、それは、カラーコードを送信する前に、実際の端末のかどうかを判断します。

このグローバル値を強制的ににすることができますがalways、特定のコマンドに適用することをお勧めします。

git -c color.status=always status -sb

すべてを一緒に入れて:

watch --color git -c color.status=always status -sb

0

場合、それは動作しますgit--color)とwatch-c)が色を使用するように言われています。

watch -cd "git branch -va --color"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.