मैं मानक आउटपुट के समान रंग का उपयोग करने के बजाय कंसोल में मानक त्रुटि को कैसे प्रिंट कर सकता हूं?
क्या गनोम टर्मिनल का उपयोग करना संभव है ?
hilite
hilite
मैं मानक आउटपुट के समान रंग का उपयोग करने के बजाय कंसोल में मानक त्रुटि को कैसे प्रिंट कर सकता हूं?
क्या गनोम टर्मिनल का उपयोग करना संभव है ?
hilite
hilite
जवाबों:
मैं stderred का उपयोग करें और यह एक अच्छा समाधान मिल गया है। इसकी रीडमी नोट के रूप में:
लिखने पर () और स्ट्रीम फ़ंक्शंस के एक परिवार (fwrite, fprintf, error ...) पर stderred हुक लिबरक से सभी stderr आउटपुट को रंगीन करने के लिए जो टर्मिनल पर जाता है और इस प्रकार इसे stdout से अलग बनाता है। मूल रूप से यह टेक्स्ट को रैप करता है जो डिस्क्रिप्टर "2" के साथ फाइल करने के लिए जाता है और उचित ANSI एस्केप कोड के साथ टेक्स्ट को लाल बनाता है।
यह एक साझा पुस्तकालय के रूप में लागू किया गया है और गतिशील लिंकर्स की सुविधा को प्रीलोड / सम्मिलित करने के लिए मौजूदा बायनेरिज़ के पुनर्संयोजन की आवश्यकता नहीं है।
यह लिनक्स (LD_PRELOAD के साथ), FreeBSD (LD_PRELOAD) और OSX (DYLD_INSERT_LIBRARIES के साथ) पर समर्थित है।
यह संकलन करने के लिए सीधा है, लेकिन आपको इसकी गीथूब साइट के निर्देशों का पालन करके इसे स्रोत से बनाने की आवश्यकता है :
sudo apt-get install build-essential git cmake
फिर
git clone git://github.com/sickill/stderred.git
cd stderred
फिर
make
इसका सबसे महत्वपूर्ण हिस्सा आपके लिए उपयुक्त रेखा जोड़ना है .bashrc
; आपको libstderred.so
निर्माण निर्देशिका में फ़ाइल से लिंक करना होगा ; आपको उस पूर्ण पथ का उपयोग करना चाहिए जहाँ बिल्ड निर्देशिका (/ होम / माइक / src / stderred / build) है। मैं निम्नलिखित को अपने साथ जोड़ता हूं .bashrc
:
export LD_PRELOAD="/home/mike/src/stderred/build/libstderred.so${LD_PRELOAD:+:$LD_PRELOAD}"
जाहिर है, जब आप इसे अब उपयोग नहीं करना चाहते हैं, तो उपरोक्त पंक्ति को अपने से हटा दें .bashrc
और टर्मिनल को पुनरारंभ करें।
गैर-मौजूद फ़ाइलों पर परीक्षण किए गए परिणाम, (यह स्पष्ट रूप sudo
से उपयोग किए जाने पर काम नहीं करेगा , क्योंकि उपयोगकर्ता .bashrc
अलग वातावरण सेट होने पर पढ़ा नहीं जाएगा):
(वैसे यह नहीं है मेरी ड्यूक बारी @ Nukem शीघ्र लाल के रूप में है कि लाल था पहले से ही )
सामान्य तौर पर, चूंकि गनोम टर्मिनल एक एएनएसआई टर्मिनल है और मानक एएनएसआई एस्केप कोड का समर्थन करता है।
यहाँ एक उदाहरण है। इसे अपने टर्मिनल में टाइप करें:
echo -e "\e[01;31mREDRUM\e[0m"
-e
ताकि विकल्प, बैकस्लैश कोड की व्याख्या करने की अनुमति देता है \e
"Esc" (हेक्स कोड 0x1B) हो जाता है। वैकल्पिक रूप से, सीधे भागने के लिए, दबाएँ ctrl-V Esc:
echo "^[[01;31mREDRUM^[[0m"
बच और [
दोनों मिलकर उस कोड को बनाते हैं जिसे टर्मिनल द्वारा मान्यता प्राप्त है। उस अनुक्रम के बाद, आपको एक औपनिवेशिक ( ;
) से अलग की गई विशेषताओं की सूची सम्मिलित करने की आवश्यकता है m
। सभी कोड के लिए यहां देखें । उदाहरणों में विशेषता शामिल है 0
(सभी विशेषताओं को रीसेट करें, जैसा कि आप ऊपर देख सकते हैं कि यह वह क्रम है जो मेरे उदाहरण को समाप्त करता है) और शैली का एक गुच्छा (रेखांकित, उज्ज्वल, बोल्ड आदि) और साथ ही कुछ रंग विशेषताएँ।
ऊपर दिया गया उत्तर आपको बताता है कि जब आप अपना प्रोग्राम लिखते हैं तो रंग का उपयोग कैसे करते हैं।
हालाँकि, अगर मैं आपके प्रश्न को सही ढंग से समझता हूँ, तो आप अपने द्वारा चलाए जा रहे किसी भी प्रोग्राम के स्टादर और स्टडआउट के लिए एक अलग दृश्य बनाना चाहेंगे। यह फ़िल्टर के माध्यम से उनके आउटपुट को पार्स किए बिना सीधा नहीं है। यहाँ एक उदाहरण दिया गया है ( यहाँ पाया गया है ) कि यह कैसे करना है:
एक फ़ंक्शन को परिभाषित करें (आप इसे अपनी .bashrc फ़ाइल में डाल सकते हैं):
color() { "$@" 2>&1>&3|sed 's,.*,\x1B[31m&\x1B[0m,'>&2; } 3>&1
इस तरह कार्यक्रम शुरू करें:
color program
कार्यक्रमों से स्टाडर को लाल रंग मिलेगा।