grep 開關 --color=auto 的作用是什麼?

grep 開關 --color=auto 的作用是什麼?

auto作為 switch 的選項在 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已定義,但終端未定義啞的

這不會在 Windows 下產生所需的行為,因為TERM通常未定義。解決此問題的簡單方法是TERM=windows在控制面板中進行設定。

最新版本grep(2.14) 透過當且僅當條件滿足時對輸出進行著色來修復此問題

isatty(STDOUT_FILENO) && should_colorize()

是 true,其中should_colorize()POSIX 和 Win32 的定義不同:

對於前者,條件相當於2.5.4;對於後者,環境變數TERM不必設定(只是不能設定dumb)。

相關內容