web-dev-qa-db-ja.com

別のプロセスにパイプしたとき、ANSIエスケープコードはどこに行きますか?それらを保持できますか?

たとえば、プロセスごとに色分けされた出力をパイプ処理したい場合があります。 grep ...しかし、それを別のプロセスにパイプすると、たとえばsed、カラーコードは失われています...

これらのコードを変更しない方法はありますか?

色付きの出力が失われる例を次に示します。

echo barney | grep barney | sed -n 1,$\ p   
37
Peter.O

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

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

expect スクリプト unbuffer を使用して、次のような疑似ttyを作成することもできます。

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

わたしにはできる ;-! (現在のMingW環境)

echo barney | grep --color=always barney | sed -n '1,$p'
**barney**

#barneyは赤いテキストとして表示されます

$ grep --version
GNU grep 2.5.4

$ sed --version
GNU sed version 4.2.1
4
shellter