web-dev-qa-db-ja.com

bashコマンドは配管時に色を保持します

重複の可能性:
色付きの出力はシェルリダイレクトを介してキャプチャできますか?

セットアップ

この場合、具体的には、別のコマンドにパイプするときにgit status -sの色を保持しようとしています。

一部のgitコマンド(たとえばdiff)やgrepなどの他のコマンドにはオプション--color=alwaysがありますが、git statusにはありません。

質問

コマンドの出力をパイプまたはキャプチャして、xtermシェルに出力していると思わせて、色が自動的に無効にならないようにする方法はありますか?

31
rennat

これは、例としてscriptの色付き出力を使用したlsスニペットです(Mac OS X 10.6の場合)。

# no colored ls output if stdout is a pipe (and not a tty)
ls -G /
ls -G / | cat
script -q /dev/null ls -G / | tr -d '\r' | cat

# write output of script command to a variable
var="$(script -q /dev/null ls -G / | tr -d '\r' | cat)"
echo "$var"
27
vego

これらのカラーコードを出力するほとんどのコマンドは、stdout/stderrがttyであるかどうかを明示的にチェックします( isatty 関数を使用)。

カラーコードを保持したい場合は、screenやダイレクトロガーscriptなどのターミナルエミュレーター内で実行して、出力をファイルに保存できます。

5
Foo Bah