web-dev-qa-db-ja.com

ターミナルで(スクリプト内で)強制的に「git status」で色を出力します

編集:

色を解析することは、一般的にはあまり考えられていないアイデアであることをお勧めします。

私がそれを欲した理由の一部は、それを解析し、自分のスクリプト出力で渡すことができるようにするためでした。これは……大丈夫ですが、磁器などを使って自分で色の部分を自分で再構築するほうが無意味でしょう。

元の質問が続きます。


私のスクリプトはカラーコードを処理するのに十分なほど(今のところ)堅牢なので、色を見るのが好きです。私はここで細かいことに反対しているように見えますが、スクリプトのエスケープコードのようなものを解析しなければならないことの大事なことは正直にわかりません。色がインタラクティブな使用に役立つ場合、スクリプトを使用してデータを集約し、手動で行うよりもさらに多くのデータを処理するのに役立つのはなぜですか?色はもっと重要ではないでしょうか?

とにかく、私はgit status出力を変更する、私が書いたきちんとした小さなシェルスクリプトを持っています。このスクリプトで色をそのままにしておくだけです。私のグローバルgit設定は、変更されたファイルと追跡されていないファイルのリストがgitステータスで色付きで表示されるように設定されています。残念ながら、git diffとは異なり、git statusの色を強制するオプションはありません。

明確にするために、これは問題です:

$ git status

完璧な出力を生成しますが、(私のスクリプトからの抜粋が続きます)

git status | sed "s/^#/\x1b[34m#[0m/"

色付きのgit status出力は生成されません。また、スクリプトからの出力のさまざまな領域を強調表示するのに役立つため、先頭のハッシュ文字を明示的に青に変換していることがわかります。

誰かが色を出す方法を知っていますか? 「偽の端末」のSTDIN/STDOUTパイプとして使用できる、私が使用できる標準プログラムはありますか?私は実際にpty疑似端末ツールにも取り組んでいるので、確かにこの目的でそれを利用できますが、それはかなり手間のかかるソリューションです(そして、まだ構築を完了していないため、まだ使用する準備ができていません)。

63
Steven Lu

Git構成の変更を回避するには、-cで構成変数を渡すことにより、現在のコマンドに対してのみこれを行うことができます。

    git -c color.status=always status | less -REX

その変数はstatusコマンド専用です。 diffshowおよびlogの場合、変数はcolor.uiです:

    git -c color.ui=always diff | less -REX

-cbeforestatusまたはdiff引数でなければならず、後ではないことに注意してください。

83
joeytwiddle

編集:

色を解析することは、一般に考えられないアイデアであると強くお勧めします。

私がそれを欲した理由の一部は、それを解析し、自分のスクリプト出力で渡すことができるようにするためでした。これは……大丈夫ですが、磁器などを使用して、自分で色の部分を自分で再構築するほうが無分法でしょう。

元の答えは次のとおりです。


私は質問した後、本当にすぐに答えを見つけ続けます。問題を解決するためのより良いアプローチを定式化するために問題を書き出すのに十分長い間、問題について考えることとの関係。とにかく、これに対する解決策はただです

git config color.status always

私は、汎用ソリューションがexpectまたは何かptyを含み、それを必要とするすべてのプログラムに、端末上にあると考えるように強制することを想像します。

20
Steven Lu

シェルコマンドを実行するgitエイリアスを使用するときにも同じ問題が発生しました。どうやらgit Shellは現在の環境から継承しないので、色付け設定について何も知りません。

グローバルgit color ui設定を追加することに加えて、エイリアスを以下のようにすることでこれを修正しました。これは、ユーザーが1.8.xバージョンのデフォルトでgitがデフォルトで使用するように、色を使用するように指示する必要がある2番目のコマンドです。

[alias]
  ignored = !git ls-files -v|grep --color '^h'

これで、エイリアスとして実行すると、コマンドを実行した場合と同じように、同等のカラー出力が生成されます。

Sedの場合、この別の答えがより確実に機能するようです。tputを使用してください。 https://unix.stackexchange.com/a/45954

2
dragon788