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
)。