जब मैं किसी अन्य प्रक्रिया से पाइप करता हूं तो मेरे ANSI एस्केप कोड कहां जाते हैं? क्या मैं उन्हें रख सकता हूँ?


36

मैं कभी-कभी रंग-कोडित आउटपुट को एक प्रक्रिया में पाइप करना चाहता हूं, जैसे। grep ... लेकिन जब मैं इसे किसी अन्य प्रक्रिया के लिए पाइप करता हूं, उदाहरण के लिए। sed, रंग कोड खो गए हैं ...

क्या thes code को बरकरार रखने का कोई तरीका है?

यहाँ एक उदाहरण है जो रंगीन आउटपुट खो देता है:

echo barney | grep barney | sed -n 1,$\ p   

4
PS .. सामान्य जानकारी के रूप में .. मैंने अभी-अभी पता लगाया है कि lesstree -C ~/ |less -Rls -lR --color=always . |less -R
कलर किए गए

जवाबों:


40

कई प्रोग्राम जो रंगीन आउटपुट उत्पन्न करते हैं, यदि वे TTY पर लिख रहे हैं, और यदि वे नहीं हैं तो रंगों को बंद कर दें। ऐसा इसलिए है क्योंकि रंग कोड कष्टप्रद हैं जब आप केवल पाठ को कैप्चर करना चाहते हैं, इसलिए वे स्वचालित रूप से "सही काम करने" की कोशिश करते हैं।

किसी प्रोग्राम से रंग आउटपुट को कैप्चर करने का सबसे सरल तरीका यह है कि वह कलर लिखने के लिए कहे भले ही वह TTY से कनेक्टेड न हो। आपको यह पता लगाने के लिए कार्यक्रम के प्रलेखन को पढ़ना होगा कि क्या यह विकल्प है। (जैसे, grepहै --color=alwaysविकल्प।)

आप expectस्क्रिप्ट unbufferका उपयोग इस तरह से एक छद्म tty बनाने के लिए भी कर सकते हैं :

echo barney | unbuffer grep barney | sed -n 1,$\ p

2
TTY का पता लगाने के बारे में उस जानकारी के लिए धन्यवाद और अनबिके नकली-आउट!
शेल्टर

@ cjm .. यह यहां काम नहीं कर रहा है (उबंटू 10.04 / bash 4.1.5 पर) ... लेकिन मेरे 10.04 रेपो में केवल -देव संस्करण है, और बैकपोर्ट में कुछ भी नहीं है ... यहां थोड़ा देर हो चुकी है, इसलिए मैं देखूंगा कल फिर ... लेकिन जैसा कि आपने कहा है, ये रंगकर्म कार्यक्रम शायद आउटपुट डेस्टिनेशन (mhhh के अनुसार टॉगल करते हैं लेकिन उन्हें कैसे पता चलेगा कि यह tion..no बात के लिए goiong है) .. और वे अच्छी तरह से मजबूर करने के लिए एक विकल्प हो सकता है यह .. धन्यवाद ,,,
पीटर।

@ यदि वे आम तौर पर यह जानने के लिए isatty का उपयोग करते हैं कि कहां stdoutजा रहा है। मुझे यकीन नहीं है कि unbufferजब आप प्रोग्राम में पाइपिंग कर रहे हैं और साथ ही इससे बाहर भी हैं; मैंने कोशिश करने के लिए इसे यहाँ स्थापित नहीं किया है।
cjm

unbufferजानकारी के लिए धन्यवाद , यह मेरे IRC बॉट के आउटपुट को शेल में आउटपुट की तरह मदद करता है।
लियूयान

4

इससे मेरा काम बनता है ;-! (वर्तमान मिंगडब्ल्यू वातावरण में)

echo barney | grep --color=always barney | sed -n '1,$p'
**barney**

# बार्नी लाल पाठ के रूप में प्रदर्शित करता है

$ grep --version
GNU grep 2.5.4

$ sed --version
GNU sed version 4.2.1

@ शेल्टर ... हां, यह विशेष रूप से उदाहरण मेरे लिए भी काम करता है .. मुझे उस विकल्प के बारे में तब तक जानकारी नहीं थी जब तक कि आप जवाब पोस्ट नहीं करते, इसलिए उसके लिए धन्यवाद ... हालांकि। मैं अभी भी सोच रहा हूं कि क्या ऐसा करने के लिए कुछ सामान्य तरीका है .... जैसे tree is colorized a-la dircolors if the LS_COLORS environment variable is set and output is to tty ... हो सकता है ... (?) यह सोचने के लिए एक पाइप को ट्रिक करने का एक तरीका है कि यह एक टीटीवाई को आउटपुट कर रहा है .. या ऐसा कुछ सामान्य वर्कअराउंड। ।
पीटरो

मैंने अभी जाँच की है man tree... यह भी एक समान विकल्प है, -C... शायद यह उन कार्यक्रमों के लिए एक सामान्य विशेषता है जो आउटपुट रंग से बचते हैं ..
पीटर।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.