Có hai vấn đề ở đây:
- Các lệnh như
lsxông hơi tự động phát hiện hỗ trợ màu sắc, không tìm thấy hỗ trợ từ các đường ống
less được đặt thành chỉ hiển thị mã màu theo mặc định.
Cả hai có thể được khắc phục nhưng đó là một chút lộn xộn:
ls --color=always | less -R
Điều này không lscụ thể. Nhiều lệnh hỗ trợ màu cũng có đối số ghi đè.
Một câu trả lời sâu hơn một chút lslà kiểm tra xem STDOUT của nó có thuộc về một thiết bị đầu cuối thực sự hay không. Khi bạn đặt mọi thứ xung quanh, STDOUT được đặt thành STDIN của lệnh tiếp theo.
Bạn có thể thấy điều này tại nơi làm việc trong lsmã nguồn . Đó là sử dụng isattylệnh (giao diện POSIX cốt lõi) để tìm hiểu tình huống này là gì:
Là màu sắc theo mặc định:
print_with_color = (i == color_always
|| (i == color_if_tty
&& isatty (STDOUT_FILENO)));
Chúng tôi có cố gắng xuất ra nhiều cột không:
if (format == long_format)
format = (isatty (STDOUT_FILENO) ? many_per_line : one_per_line);
//...
if (isatty (STDOUT_FILENO))
{
format = many_per_line;
set_quoting_style (NULL, shell_escape_quoting_style);
qmark_funny_chars = true;
}
else
{
format = one_per_line;
qmark_funny_chars = false;
}
grepthực hiện một điều rất giống nhau, trừ khi bị ghi đè rõ ràng, nó sẽ phát hiện hỗ trợ màu, với isatty:
color_option = isatty (STDOUT_FILENO) && should_colorize ();
grep --color=always "search string" * | less -Rnhưng tôi có xu hướng sử dụngmostngày nay thay vìless. CSONG : gnu.org/software/src-highlite là công cụ tô màu (ít hoạt động hơn)