कमांड के अंत में रोकने के लिए मैं बैश शेल PS1 रंग कैसे रोकूं?


12

मेरे पास एक कस्टम PS1 रंग है जहां मेरे पास एक अलग रंग में वास्तविक शेल कमांड हैं, बस इसलिए मैं जल्दी से देख सकता हूं कि मैंने कौन सी कमांड टाइप की है और इसे कमांड आउटपुट से अलग करता है।

मान लीजिए PS1 में रंग कमांड प्रॉम्प्ट के लिए 'ब्लू' पर सेट है और मेरे शेल में डिफ़ॉल्ट रंग सफेद है।

  • मैं एक कमांड टाइप करता हूँ जैसे ls, (ls -l रंगीन नीला है)
  • यह उत्पादन उत्पन्न करता है, पहली पंक्ति अभी भी नीली है
  • शेष सभी पंक्ति सफेद के रूप में आती है

मैं जो चाहता हूं, वह है 'व्हाइट' होने के कमांड के बाद का सारा आउटपुट।

एक और उदाहरण:

  • मैं एक कमांड 'कैट' टाइप करता हूं, जिसका रंग नीला है
  • आउटपुट आता है, पूरा आउटपुट नीला है

मैं कमांड 'प्रॉम्प्ट' 'ब्लू' रखते हुए आउटपुट को 'व्हाइट' होना चाहूंगा।

कुछ आदेशों पर, यह ठीक है, अन्य कमांड, एक ही रंग आउटपुट की पहली पंक्ति में ओवरफ्लो करता है और फिर डिफ़ॉल्ट रंग में किक करता है और कुछ अन्य कमांड, पूरे आउटपुट (जैसे बिल्ली) में एक ही रंग होता है।

क्या कोई तरीका है जिसे मैं केवल एक रंग में टाइप करता हूं और बाकी को डिफ़ॉल्ट में रखने का?

मैं OSX पर हूं।

EDIT # 1

यहाँ एक स्क्रीनशॉट है जो @ derobert की टिप्पणियों में जुड़ा हुआ है जो दिखाता है कि मैं क्या देख रहा हूँ।

                 एस एस # 1


2
आपको हमें अपना संकेत दिखाने की आवश्यकता है ताकि हम त्रुटियों को इंगित कर सकें।
ग्लेन जैकमैन

जवाबों:


14

आप मूल रूप से bash कमांड को निष्पादित करने से पहले टर्मिनल कलर को रीसेट करना चाहते हैं। यह एक के साथ किया जा सकता है trap

उदाहरण के लिए:

trap '[[ -t 1 ]] && tput sgr0' DEBUG

बैश DEBUGकमांड से ठीक पहले ट्रैप को अंजाम देता है , इसलिए इसका परिणाम tput sgr0प्रत्येक कमांड से पहले रनिंग फॉर्मेट (जो कि फॉर्मेटिंग एट्रिब्यूट्स होता है) होगा।

यह [[ -t 1 ]]सुनिश्चित करने के लिए एक सुरक्षा जांच है कि STDOUT वास्तव में एक टर्मिनल है। ऐसे कुछ मामले हो सकते हैं जहां bash का STDOUT किसी टर्मिनल (पाइपिंग, रिमोट ssh, आदि) से जुड़ा नहीं है, और इसलिए आप tputटर्मिनल एस्केप कोड नहीं भेजना चाहते हैं।


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

1
आपके .bashrc(या जहाँ भी $PS1सेट किया गया है) मैं इसे $PS1परिभाषा के ठीक बगल में रखूंगा ताकि आपको पता चले कि वे संबंधित हैं।
पैट्रिक

ठीक है वाह कि काम करता है। किसी भी संभावना है कि यह गलत हो सकता है?
पॉलीम

@polym कोई और नहीं
पैट्रिक

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