यहां पर दो समस्याएं हैं:
- की तरह आदेश
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 एक रंग हाइलाइटर है (कम काम भी करता है)