web-dev-qa-db-ja.com

端末に色を正しく表示するためにgccをパイプなしにパイプ接続する

私はgccでファイルをコンパイルしています(実際には作成していますが、気にしないでください)。これにより、色付きのエラーメッセージがstderrに送信されます。私もです:

gcc a.c 2>&1 | less

しかし、私が得るのは次のような行です:

a.c: In function <E2><80><98>whatever(int)<E2><80><99>:
a.c:11:10: warning: etc etc

つまり、色ではなく数値のエスケープコードが表示されます。

SUの この答え のアドバイスに従ってみましたが、うまくいきませんでした。または、ls --color | lessは機能しますが、上記のgccコマンドは機能しません。私は何をすべきか?

ノート:

  • SSH経由でこのマシンにTERM=xterm-256colorで接続しています
  • lessを経由せずに、ターミナルの色を取得します。
7
einpoklum

要求に応じて回答として投稿します。

ここには2つの問題があります。

  • デフォルトでは、gccは、出力が端末である場合にのみカラーコードを印刷します。
  • デフォルトでは、lessは未加工のカラー文字を端末に送信しません。

オプション-fdiagnostics-color=alwaysを渡すことで、gccに強制的にカラーコードを印刷させることができます。これにより、コンパイラエラーの解析に依存するさまざまなツールが機能しなくなることに注意してください。

オプション-rまたは-Rを渡すことにより、lessに強制的にカラーコードを端末に送信させることができます。後者は、実際のANSI色のコードのみを許可するため、より安全です。

要約すると:

gcc -fdiagnostics-color=always a.c 2>&1 | less -R
12
Satō Katsura