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=auto
là 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ì TERM
thô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=windows
bả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 TERM
không cần phải được đặt (chỉ là không thể dumb
).
sdgstd.h
, istty(stdout)
trả về 0
nếu đầu ra được chuyển hướng đến một tệp.
grep
và less
từ dự án GnuWin (gnuwin32.sourceforge.net). cmd.exe
được cải thiện với ansicon
tiện ích. less --color=auto
hoạ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=auto
không in trình tự thoát trong cả hai trường hợp.