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