कम खो रंगों में ls या पेड़ का आउटपुट पाइप करना?


12

treeऔर lsफ़ाइल प्रकारों को अलग-अलग रंग करके अलग-अलग फ़ाइल प्रकार कर सकते हैं।

treeऔर lsअक्सर फाइलों की एक लंबी सूची (निर्देशिकाओं सहित) का उत्पादन करते हैं, इसलिए मैं स्टडआउट आउटपुट को पाइप करता हूं less

लेकिन lessरंगों को संरक्षित नहीं करता है। हम इसे कैसे रंग दिखा सकते हैं, या कुछ वैकल्पिक तरीके?

बस लिंक की गई सूची को देखा, लेकिन पाइप करना less -Rया less -rकाम नहीं करना है। मेरा OS उबुन्टु 12.04 है। lessसंस्करण 444: 09 जून 2011 है।


1
@JosephR। दूसरा सवाल आधा-संबंधित है लेकिन डुप्लिकेट नहीं है। यहां हम बात कर रहे हैं ls(नहीं tree) जिसके लिए कुछ कार्यान्वयन को रंगीन आउटपुट के लिए बाध्य करने की आवश्यकता होती है जब आउटपुट टर्मिनल पर नहीं जाता है ( less -Rआवश्यकता के अतिरिक्त )
स्टीफन चेज़लस

क्या आपने कोशिश की है tree -C | less -R? -Cविकल्प कम के पेड़ के बराबर है --color=always, मुझे लगता है (कम से कम यह मेरे लिए काम करता है, Ubuntu 12.04 पर)।
स्टीलड्राइवर

@steeldriver धन्यवाद यह काम करता हैं। रंगों में हमेशा अकेले treeऔर बिना -Cआउटपुट के, लेकिन जब उनका उपयोग किया जाता है तो वे अलग क्यों होते हैं less?
टिम

2 कारणों @Tim: 1. lessहटा देगा डिफ़ॉल्ट रूप से रंग जब तक आप इसे देने के -Rविकल्प है, जो इसे में छोड़ सकते हैं बताता है, और 2. treeऔर lsऔर अन्य कार्यक्रमों को आम तौर पर बंद रंग जब वे पता लगाने के अपने उत्पादन में एक अन्य कार्यक्रम करने जा रहा है कर देते हैं (जैसे less) अपने टर्मिनल के लिए सीधे के बजाय, जब तक आप के साथ -Cया पर रंग मजबूर नहीं करते --color=always
jw013

2
यह लिंक की गई सूची क्या है जिसके बारे में आप लिखते हैं?
Anthon

जवाबों:


15

मैं मान रहा हूं कि आप उपयोग कर रहे हैं ls --color=auto, जो ls'स्वचालित' मोड में रंग का उपयोग करने के लिए कहता है। 'स्वचालित' मोड बताता lessहै कि क्या STDOUT एक टर्मिनल है, और यदि हां, तो रंग का उपयोग करें, अन्यथा रंग का उपयोग न करें। जब आप पाइप lsकरते हैं less, तो STDOUT एक टर्मिनल नहीं है, यह STDIN से जुड़ा है less, जो एक सामान्य पाइप है।

समाधान, उपयोग ls --colorया ls --color=always

हालाँकि अब यह एक और संभावित मुद्दे की ओर ले जाता है। आपके आधार पर less, यह रंग नहीं दिखा सकता है, लेकिन इसके बजाय भागने के कोड दिखा सकता है। समाधान का उपयोग करना है less -R। यह lessएएनएसआई रंग से बचने के लिए एस्केप कोड से गुजरना बताता है। आप इसका उपयोग नहीं करना चाहते हैं -rक्योंकि इससे लंबी लाइनों के साथ समस्याएं पैदा हो जाएंगी, जो चारों ओर लपेटती हैं, क्योंकि लाइन की लंबाई ठीक से गणना नहीं करती है।

तो पूरा समाधान:

ls --color | less -R

इसी तरह के लिए tree:

tree -C | less -R
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.