यहां पर दो समस्याएं हैं:
- की तरह आदेश
ls
-which रंग समर्थन पाइप से समर्थन नहीं मिल रहा है स्वत: पता लगाएं
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
। ALSO: gnu.org/software/src-highlite एक रंग हाइलाइटर है (कम काम भी करता है)