2011-11-22 14 views
5

मेरे पास एक स्क्रिप्ट है जो अपने आउटपुट में टेक्स्ट मैचों को हाइलाइट करने के लिए एस्केप कोड का उपयोग करती है। सभी को छोड़कर अच्छा है जब आउटपुट less पर पाइप किया जाता है, जो बचने वाले कोडबैश - रंग कोड से निकलता है

उदा।

$ echo -e "\033[31m -- Hello World! -- \033[m" 
-- Hello World! -- 

पाइप्ड less रहे हैं:

$ echo -e "\033[31m -- Hello World! -- \033[m" | less 
ESC[31m -- Hello World! -- ESC[m 

मैं ls, grep की तरह सोच रहा था कि कैसे अन्य उपकरण, आदि रंग में उत्पादन करने में सक्षम हैं फिर भी यह जब less को पहुंचाया ठीक लग रहा है?

उत्तर

5

आपके द्वारा उल्लेख किए जाने वाले अधिकांश टूल सी फ़ंक्शन isatty() को कॉल करते हैं जो यह निर्धारित करता है कि प्रक्रिया के प्रासंगिक फ़ाइल डिस्क्रिप्टर (इस मामले में stdout) टर्मिनल पर जा रहा है या नहीं।

यदि आउटपुट टर्मिनल के लिए है, तो वे रंग को सक्षम करते हैं, हाइलाइट करते हैं, बीप शोर करते हैं या जो भी अन्य फीचर्स उन्हें लगता है कि मानव उपयोगकर्ता मूल्य प्राप्त करेंगे। यदि कोई टर्मिनल नहीं है, तो वे अन्य उपकरणों के पाचन के लिए कच्चे पाठ का उत्पादन करते हैं।

जब आप लिखना

grep -v "Dogs" list-of-animals | less 

ग्रेप से isatty() कॉल फ़ाइल वर्णनकर्ता पाइप के लिए अग्रणी, अपने टर्मिनल नहीं पर चलता है। तो यह शून्य लौटाता है, errno EINVAL या ENOTTY पर सेट होता है और grep कम कच्चे पाठ को कम के लिए उपयुक्त बनाता है।

+0

समझ गया। स्पष्टीकरण के लिए धन्यवाद। – armandino

6

grep और दोस्तों का पता लगाएं कि आउटपुट टर्मिनल पर है या नहीं। जब कम करने के लिए पाइप किया जाता है, तो यह नहीं होता है, इसलिए वे रंग अक्षम करते हैं।

आउटपुट टर्मिनल है या नहीं, यह जांचने के लिए isatty पर देखें।

ध्यान दें कि मैं कभी कभी यह काफी कष्टप्रद क्योंकि मैं कम रंग प्रदर्शित करना चाहते हैं :

alias less='less -SR' 
alias grep='grep --color=always' 

इसके अलावा रिवर्स के लिए ANSIFilter को देखो: फिल्टर करने के लिए एएनएसआई मौजूदा से बाहर निकल जाता है धाराएं (आप इसका उपयोग एचटीएमएल, आरटीएफ, और संभावित रूप से अन्य प्रारूपों के उत्पादन के लिए भी कर सकते हैं)

2

यदि आप रंग से बचने के अनुक्रमों को कम करने की अनुमति देना चाहते हैं टर्मिनल के लिए:

> echo -e "\033[31m -- Hello World! -- \033[m" | less -R

... या आप सभी से बच दृश्यों पारित करने के लिए चाहते हैं:

> echo -e "\033[31m -- Hello World! -- \033[m" | less -r

+0

+1 :-) भी: google "ansi escape code", और: http://www.linuxfocus.org/English/May2004/article335.shtml – Tilo

9

उपयोग less -R या पर्यावरण के लिए LESS=-R जोड़ें। यह अनुरोध है कि less सामान्य वर्णों के रूप में उन्हें मुद्रित करने के बजाय टर्मिनल पर कुछ बचने के अनुक्रम (जैसे रंग) को पास करें।

+0

यह वही है जो मैं आपको धन्यवाद देने के लिए देख रहा था। – jimh