別のプロセスにパイプするとき、私のANSIエスケープコードはどこに行きますか?保管できますか?

別のプロセスにパイプするとき、私のANSIエスケープコードはどこに行きますか?保管できますか?

たとえば、プロセスの色で区切られた出力をパイプしたい場合があります。 grep... しかし、別のプロセスにパイプする場合、たとえば。 sed、カラーコードがありません...

このコードをそのまま維持する方法はありますか?

以下は、カラー出力が欠落している例です。

echo barney | grep barney | sed -n 1,$\ p   

ベストアンサー1

カラー出力を生成する多くのプログラムはTTYに書き込んでいるかどうかを検出し、そうでない場合はカラーをオフにします。これは、テキストだけをキャプチャしたい場合は、カラーコードが面倒で自動的に「正しいことをする」ためです。

これらのプログラムでカラー出力をキャプチャする最も簡単な方法は、TTYに接続していなくてもカラーを書き込むように指示することです。このオプションがあるかどうかを確認するには、プログラムのマニュアルを読んでください。 (たとえば、オプションがgrepあります--color=always。)

また、使用することができますexpectスクリプトunbuffer次のように擬似ttyを作成します。

echo barney | unbuffer grep barney | sed -n 1,$\ p

おすすめ記事