Câu trả lời:
Với --color=auto, grep sẽ làm nổi bật các chuỗi khớp nếu (và chỉ khi) đầu ra được ghi trực tiếp vào thiết bị đầu cuối và thiết bị đầu cuối cho biết có khả năng hiển thị đầu ra màu.
Thông thường, --color=autolà những gì bạn muốn. Nếu, ví dụ, bạn sử dụng grep để khớp URL và chuyển nó thành Wget, Wget sẽ thấy \e[1;31mhttp://...thay vì URL thực tế (và bị sặc trên đó).
Các lệnh sau sẽ dẫn đến đầu ra màu:
echo Super User | grep --color=auto Super
echo Super User | grep --color=always Super | cat
Lệnh này, tuy nhiên, không nên:
echo Super User | grep --color=auto Super | cat
Bất kỳ sự không nhất quán với hành vi này nên được coi là một lỗi.
Với --color=auto, phiên bản Grep cho Windows mới nhất (2.5.4) - cũng như phiên bản 2.5.4 gốc, nó dựa trên - tô màu đầu ra khi và chỉ khi điều kiện
isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")
là đúng, nghĩa là, nếu và chỉ khi đầu ra đang được ghi vào một thiết bị đầu cuối, biến môi trườngTERM được xác định và thiết bị đầu cuối không bị câm .
Điều này sẽ không tạo ra hành vi mong muốn trong Windows, vì TERMthông thường không được xác định. Một giải pháp dễ dàng cho vấn đề này là đặt TERM=windowsbảng điều khiển.
Phiên bản mới nhất của grep (2.14) khắc phục sự cố này bằng cách tô màu đầu ra khi và chỉ khi điều kiện
isatty(STDOUT_FILENO) && should_colorize()
là đúng, nơi should_colorize()được định nghĩa khác nhau cho POSIX và Win32:
Đối với trước đây, điều kiện tương đương với một trong 2.5.4; đối với cái sau, biến môi trường TERMkhông cần phải được đặt (chỉ là không thể dumb).
sdgstd.h, istty(stdout)trả về 0nếu đầu ra được chuyển hướng đến một tệp.
grepvà lesstừ dự án GnuWin (gnuwin32.sourceforge.net). cmd.exeđược cải thiện với ansicontiện ích. less --color=autohoạt động như mong đợi: sử dụng màu khi không áp dụng chuyển hướng và không khi chuyển hướng đầu ra. Nhưng grep --color=autokhông in trình tự thoát trong cả hai trường hợp.