टी करने के लिए पाइपिंग करते समय रंगों को संरक्षित करें


61
ls -l --color=auto | tee output.log

बिना पाइप / टी के यह रंगीन है। मैं इसे कैसे बना सकता हूं ताकि यह रंग का उपयोग करते समय रंग में रहे tee(केवल स्क्रीन पर रंगीन हो सकता है, मुझे लॉग में रंगों की परवाह नहीं है)।


जवाबों:


82

बस unbufferकिसी भी कमांड को डालने से पहले यह सोचें कि यह इंटरएक्टिव आउटपुट पर लिख रहा है, भले ही यह वास्तव में किसी अन्य निष्पादन योग्य में पाइपिंग कर रहा हो। इस मामले में रंग को संरक्षित करेगा ls

उदाहरण के लिए

unbuffer ls -l --color=auto | tee output.log

यदि आपके पास पहले से यह स्थापित नहीं है, तो उबंटू और अन्य डेबियन-ईश लिनक्स वितरण पर आप कर सकते unbufferहैं।

sudo apt-get install expect-dev

6
एक अन्य समाधान, जिसे कुछ भी स्थापित करने की आवश्यकता नहीं है, stackoverflow.com/questions/3515208/… पर है
Tgr

3
यह रंग कोड (निश्चित रूप से) के परिणामस्वरूप फ़ाइल का कारण बनता है; क्या फिर फ़ाइल को इस तरह से प्रिंट करना है जो रंग कोड का उपयोग करता है और टर्मिनल में रंगों को ठीक से प्रदर्शित करता है?
काइल स्ट्रैंड

2
यूजी, जो पासवर्ड प्रविष्टियां बनाता है, आपका पासवर्ड क्लियरटेक्स्ट में दिखाता है!
एंडीडॉग

@ यह समाधान मेरे लिए OS X पर काम नहीं करता था xcodebuild- कच्चे रंग का आउटपुट प्राप्त करने की कोशिश कर रहा था - इसके बजाय मुझे बिना रंग के कट -अप लाइनें मिलीं। unbuffer xcodebuild | less -Rहालांकि, त्रुटिपूर्ण रूप से काम किया।
स्लिप डी। थॉम्पसन

2
आपको expect-devपैकेज की आवश्यकता नहीं है । expectपर्याप्त है।
यज्ञ

11

Ls विकल्प का प्रयोग करें --color=always

--color=auto एक पाइपलाइन के लिए रंग उत्पादन नहीं होगा - स्पष्ट कारणों के लिए।

मुख्य पृष्ठ निम्नलिखित कहता है:

--Color = ऑटो के साथ, रंग कोड केवल आउटपुट हैं यदि मानक आउटपुट एक टर्मिनल (tty) से जुड़ा है।


2
ठीक। इससे स्पष्ट हुआ। लेकिन क्या मैं अभी भी स्क्रीन पर रंगों को देख सकता हूं? (यह एक TTY सब के बाद है)। मुझे कोई आपत्ति नहीं है कि उन्हें लॉगफ़ाइल में रखा गया है, लेकिन मैं निश्चित रूप से उन्हें अपनी स्क्रीन पर चाहता हूं।
Paweł Go Pawcicki

मुझे लगता है कि मैंने खुद को पर्याप्त स्पष्ट नहीं किया। ls -lबस एक उदाहरण था। मेरे पास एक पूरी तरह से अलग कमांड (हरोकू लॉग्स) है जो कि पाइप्स के रंग को स्ट्रिप्स करता है tee। और मैं टी / पाइप को "ठीक / बदलना" चाहता हूं, न कि वह कमांड जिसे मैं निष्पादित कर रहा हूं।
Paweł Goicicki

1
@ पावेल, आप इसे आसानी से टी / पाइप में ठीक नहीं कर सकते क्योंकि टी / पाइप इन कलर कोड को नहीं हटा रहे हैं। समस्या यह है कि प्रारंभिक आदेश यह देखता है कि यह टर्मिनल को नहीं लिख रहा है। आपको एक छद्म टर्मिनल की आवश्यकता होती है जो एक पाइप की तरह काम करता है लेकिन जो कमांड को टर्मिनल के रूप में देखता है।
RedGrittyBrick

हम्म ... काफी अच्छा। मुझे लगता है कि मुझे यह स्वीकार करने की आवश्यकता है कि यह कैसा है।
15:30 पर पावेल गोइस्की

3
@ PawełGo Pawcicki यह जवाब केवल के लिए समस्या को हल करता है ls। मेरा उत्तर देखें जो सभी कार्यक्रमों के लिए समस्या को हल करता है, जिसमें हरोकू लॉग भी शामिल है।
Eamonn O'Brien-Strain

3

मैं scriptस्वीकृत उत्तर की टिप्पणी में दिए गए समाधान का विस्तार करूंगा । उपयोग करना scriptउस स्थिति में उपयोगी हो सकता है जब आप अपेक्षित पैकेज को स्थापित नहीं कर सकते या नहीं कर सकते हैं जिसमें unbufferकमांड शामिल है ।

प्रिंट ls stdout के लिए उत्पादन और फ़ाइल रंग कोड के साथ :

script -efq output.log -c "ls -l --color=auto"

कहाँ ( man script):

  -e, --return
         Return the exit code of the child process.  Uses the same
         format as bash termination on signal termination exit code is 128+n.
  -f, --flush
         Flush output after each write.  This is nice for telecooperation:
        one person does `mkfifo foo; script -f foo', and another can 
        supervise real-time what is being done using `cat foo'.
  -q, --quiet
         Be quiet (do not write start and done messages to either 
         standard output or the typescript file).

रंगों के साथ आउटपुट फ़ाइल देखें :

less -r output.log

2
-eसमान है --return- दोनों की कोई आवश्यकता नहीं; -efqहै --return --flush --quiet
नोएल मेर्स्क

@NoelMaersk धन्यवाद मैंने उत्तर में पैरामीटर स्पष्टीकरण को शामिल किया।
जुसो ओह्टनन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.