77

編集:

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

私がそれを望んだ理由の 1 つは、それを解析して、自分のスクリプト出力で渡すことができるようにするためでした。これは……まあ、磁器とかを使って自分で着色部分を作り直した方が良さそうです!

元の質問は次のとおりです。


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

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

非常に明確にするために、これが問題です。

$ git status

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

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

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

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

4

3 に答える 3

127

git 構成を変更しないようにするには、現在のコマンドに対してのみ色を有効にします-c

コマンドの場合status、変数はcolor.status次のとおりです。

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

diffshowlogおよびコマンドの場合grep、変数はcolor.ui次のとおりです。

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

はor引数の後ではなく-cに来なければならないことに注意してください。statusdiff

または、、、およびコマンドの場合は、diffコマンドの後に次を使用できます。showloggrep--color=always

    git diff --color=always | less -REX

注: スティーブンが言ったように、意味のあるデータを抽出しようとしている場合は、色を解析して意味を抽出する代わりに、 を使用--porcelainしてよりパーサーに適した出力を得ることができます。

    git status --porcelain | awk ...

その後、必要に応じて、後で色を再導入できます。

ユーザーが設定した色を取得するには、次を使用できますgit config --get-colour

    reset_color="$(tput sgr0)"
    remote_branch_color="$(git config --get-color color.branch.remote white)"

    echo "Pushing to ${remote_branch_color}${branch_name}${reset_color}"

ここにいくつかの例があります。

于 2013-08-18T23:21:19.543 に答える
22

編集:

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

私がそれを望んだ理由の 1 つは、それを解析して、自分のスクリプト出力で渡すことができるようにするためでした。これは……まあ、磁器とかを使って自分で着色部分を作り直した方が良さそうです!

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


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

git config color.status always

汎用ソリューションには、それを必要とするプログラムが端末上にあると思わせるためのexpect何かが含まれていると思います。pty

于 2013-04-18T03:01:20.900 に答える