Có hai vấn đề ở đây:
- Các lệnh như
ls
xô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 ls
cụ 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 ls
là 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 ls
mã nguồn . Đó là sử dụng isatty
lệ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;
}
grep
thự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 -R
nhưng tôi có xu hướng sử dụngmost
ngày nay thay vìless
. CSONG : gnu.org/software/src-highlite là công cụ tô màu (ít hoạt động hơn)