auto
grep でスイッチのオプションとしてどのような効果が--color
ありますか? grep はいつ一致する文字列に色を付けることを決め、いつは決めないのですか?
答え1
予想される行動
を使用すると--color=auto
、出力が端末に直接書き込まれ、その端末が色付き出力を表示できる場合のみ、grep は一致する文字列を強調表示します。
通常、--color=auto
これは必要なことです。たとえば、grep を使用して URL を一致させ、それを Wget にパイプすると、Wget は\e[1;31mhttp://...
実際の URL ではなく を参照します (そして、それを停止します)。
次のコマンドを実行すると、色付きの出力が生成されます。
echo Super User | grep --color=auto Super
echo Super User | grep --color=always Super | cat
ただし、このコマンドでは次のことは行わないでください。
echo Super User | grep --color=auto Super | cat
この動作に矛盾がある場合は、バグとみなされます。
ソースコード
--color=auto
、最新のWindows 用の Grepバージョン(2.5.4) – ベースとなるオリジナルの2.5.4と同様に、条件が満たされた場合のみ出力を色付けします。
isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")
は真です。つまり、出力が端末に書き込まれている場合にのみ、環境変数TERM
定義されており、端末はバカ。
TERM
は通常定義されていないため、Windows では目的の動作は得られません。この問題の簡単な解決策はTERM=windows
、コントロール パネルで を設定することです。
最新バージョンのグレップ(2.14)は、条件が満たされる場合にのみ出力を色付けすることでこの問題を修正しました。
isatty(STDOUT_FILENO) && should_colorize()
は真ですが、should_colorize()
POSIX と Win32 では定義が異なります。
前者の場合、条件は 2.5.4 の条件と同等です。後者の場合、環境変数をTERM
設定する必要はありません (設定できないだけですdumb
)。