มีสองปัญหาที่นี่:
- คำสั่งเช่น
ls
- ซึ่งตรวจจับการสนับสนุนสีโดยอัตโนมัติ - ไม่พบการสนับสนุนจากท่อ
less
ถูกตั้งค่าเป็นเพียงแสดงรหัสสีตามค่าเริ่มต้น
ทั้งคู่สามารถเอาชนะได้ แต่มันก็เป็นเรื่องเล็กน้อย
ls --color=always | less -R
สิ่งนี้ไม่ls
เฉพาะเจาะจง คำสั่งจำนวนมากที่สนับสนุนสีก็มีอาร์กิวเมนต์แทนที่
คำตอบเชิงลึกเพิ่มเติมเล็กน้อยls
คือการตรวจสอบว่า STDOUT ของมันเป็นของเทอร์มินัลจริงหรือไม่ เมื่อคุณไพพ์สิ่งรอบ ๆ STDOUT ถูกตั้งค่าเป็น STDIN ของคำสั่งถัดไป
คุณสามารถดูนี้ในที่ทำงานในls
รหัสที่มา มันใช้isatty
คำสั่ง (อินเตอร์เฟส POSIX หลัก) เพื่อกำหนดว่าสถานการณ์คืออะไร:
เป็นสีตามค่าเริ่มต้น:
print_with_color = (i == color_always
|| (i == color_if_tty
&& isatty (STDOUT_FILENO)));
เราจะพยายามส่งออกในหลายคอลัมน์:
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
ทำสิ่งที่คล้ายกันมากเว้นแต่จะแทนที่อย่างชัดเจนมันจะตรวจจับการสนับสนุนสีด้วยisatty
:
color_option = isatty (STDOUT_FILENO) && should_colorize ();
grep --color=always "search string" * | less -R
แต่ผมมักจะใช้ในปัจจุบันแทนmost
less
นอกจากนี้: gnu.org/software/src-highliteเป็นปากกาเน้นข้อความสี (ทำงานได้น้อยลงเช่นกัน)