PS1 समस्या, सीएलआई को गड़बड़ाना


16

मैंने एक साधारण PS1 असाइनमेंट किया

PS1="\e[0;31m[\W]\$ \e[m "

मैं बस इतना करना चाहता था कि शीघ्र रंग बदलना और केवल सापेक्ष पथ प्रदर्शित करना है। हालाँकि यह सीएलआई को गड़बड़ करता है। उदाहरण के लिए, जब यह फसलों के साथ इतिहास को ब्राउज़ करता है और प्रदर्शन को ओवरलैप करता है। जब मैं एक लंबी कमांड टाइप करता हूं, तो कर्सर प्रांप्ट डिस्प्ले के साथ ओवरलैपिंग स्क्रीन की शुरुआत में चला जाता है। मैंने क्या गल्त किया है?

जवाबों:


30

ऐसा इसलिए है क्योंकि bash को लगता है कि प्रॉम्प्ट इससे कहीं अधिक लंबा है। \e[0;31mउदाहरण के लिए, भागने का क्रम टर्मिनल द्वारा चूसा जाता है, जो बदले में निम्नलिखित पाठ को लाल कर देता है, लेकिन बैश को यह पता नहीं होता है। तो, आपको यह बताना होगा कि वर्णों के अनुक्रम को प्रॉम्प्ट की लंबाई में नहीं गिना जाना चाहिए, और आप इसे अंदर संलग्न करके करते हैं \[ \]। मैं हार्डकॉडिंग टर्मिनल एस्केप सीक्वेंस के बजाय टुट का उपयोग करने की सलाह देता हूं।

red=$(tput setaf 1)
reset=$(tput sgr0)
PS1='\[$red\][\W]\$\[$reset\] '

अधिक के लिए BashFAQ 53 और टर्मिनल कोड (ANSI / VT100) देखें


1
आपके सही वर्णन के लिए धन्यवाद, मुझे यह समस्या कई बार हुई और कभी नहीं पता कि समस्या कहाँ थी।
Betlista

+1, यहाँ भी। उन लोगों के लिए आँख बंद करके इस समाधान का परीक्षण और यह करता है नहीं काम करते हैं, यह की कीमत यहाँ यह उल्लेख वहाँ एक और वाक्य रचना कार्यों के भीतर रंग से बचने के लिए BashFAQ लिंक में वर्णित है कि, \001 \002
स्टीफन नेदिज़ेल्स्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.