--color=を使用すると、grepがリダイレクトされる場所をどのように「知ることができますか?」 [コピー]

--color=を使用すると、grepがリダイレクトされる場所をどのように「知ることができますか?」 [コピー]

sudo echo hello > root-owned-file.txtリダイレクトはroot権限を継承しないため、これが機能しないことを学びました。echo hello | sudo tee root-owned-file.txtしたがって、またはecho hello | sudo cp /dev/stdin root-owned-file.txt。ただし、--color=ttygrepはttyにリダイレクトするときに色を追加できますが、他のターゲットではそうではありません。リダイレクトはターゲットプロセスとは全く別のものですか?それでは、grepは色が省略された場合をどうやって「知る」のでしょうか?

私の直感では、リダイレクトがチャンネル1/2/3以上であることです。私の現在の理論は、grepが複数のバリエーションの色と一般的な出力をチャンネル1に送信し、親シェルがターゲットがttyに関連付けられているかどうかに応じてターゲットにリダイレクトする正しいバリアントを選択することです。あるいは、親シェルはターゲットプロセス/ファイルを準備し、シグナルまたはファイルディスクリプタの種類をソースプロセスに送信できますが、これはパイプの逐次特性に影響を与える可能性があり、これはより厳しいと思います。たとえば、パイプラインの次のコマンドはファイル記述子が生成される前にフラグを設定でき、ソースコマンドはそのフラグの元の値に依存する可能性があるため、パイプラインの順序が厳密でないと競合状態が発生する可能性があります。

ベストアンサー1

grepただ使用isatty(3)標準出力がttyであることを確認してください。その場合は、その色が使用され(ttyまたは使用auto)、それ以外の場合は使用されません。

おすすめ記事