色付きの出力( ls など)を出力する端末からコマンドを実行すると またはgcc )、色付きの出力が印刷されます。私の理解では、プロセスは実際にはANSIエスケープコードを出力しており、端末は色をフォーマットします。
ただし、別のプロセス(カスタムCアプリケーションなど)で同じコマンドを実行し、出力をアプリケーション自体の出力にリダイレクトすると、これらの色は持続しません。
プログラムは、テキストをカラー形式で出力するかどうかをどのように決定しますか?環境変数はありますか?
承認された回答:
このようなプログラムのほとんどは、デフォルトではカラーコードのみを端末に出力します。 isatty(3)を使用して、出力がTTYであるかどうかを確認します。 。通常、この動作をオーバーライドするオプションがあります。すべての場合に色を無効にするか、すべての場合に色を有効にします。 GNU grepの場合 たとえば、-color =never 色と-color=alwaysを無効にします それらを有効にします。
シェルでは、 -tを使用して同じテストを実行できます テストコード> 演算子: [-t 1] 標準出力が端末の場合にのみ成功します。