बैश PS1 में लंबी लाइनें ओवरलैप करती हैं


13

मैंने PS1सर्वर नाम, समय, उपयोगकर्ता नाम और अन्य उपयोगी चर के साथ एक फैंसी दो-लाइन बैश प्रॉम्प्ट कॉन्फ़िगर किया है ।

PS1="\n\[\033[1;34m\]\342\226\210\342\226\210 \u @ $SERVER_NAME""$BBlue"" \w""$Color_Off  \n\[\033[0;36m\]\342\226\210\342\226\210 \d \t $ \[\033[0;39m\]"

यहाँ छवि विवरण दर्ज करें

पूरा गितुब स्रोत यहाँ

समस्या यह है कि लंबी लाइनें अक्सर खुद के चारों ओर लपेटी जाती हैं, जिसका अर्थ है कि नई लाइन पिछले एक को ओवरलैप करती है।

समस्या असंगत है: कुछ पंक्तियों को सही ढंग से लपेटा गया है, कुछ नहीं हैं।

इसे ठीक करने के लिए कोई भी विचार?

जवाबों:


16

बैश प्रॉम्प्ट के लिए यहां मेरे फैंसी टू-लाइन PS1 है।

PS1

\[\e[1;32m\]\H\[\e[0m\] :: \[\e[1;30m\]\d\[\e[0m\] \@ :: \[\e[1;33m\]\w\n\[\e[1;34m\]\u $ \[\033[0m\]

तो मैंने यह किया। अगर यह मेरा रंग था:

\e[1;32m

मैंने इसे बदल दिया:

\[\e[1;32m\]

अनिवार्य रूप से आपको इसे संलग्न करना होगा:

\[$mycolor\]

इस उत्तर की जाँच करें ।


+1 धन्यवाद। ताज्जुब है, यह मैक पर काम करने के लिए प्रतीत नहीं होता है।
एडम मटन

तुम एक जीवन रक्षक हो! मैक के लिए के रूप में, एडम .. यह कॉलम की गिनती के कारण सबसे अधिक संभावना है। प्रॉम्प्ट को केवल वर्णों की एक स्ट्रिंग पर सेट करने का प्रयास करें, जैसे 'यह मेरा संकेत है:' और देखें कि क्या समस्या बनी रहती है। यदि ऐसा है, तो आपके टर्मिनल पर आपकी कॉलम सेटिंग या तो बहुत चौड़ी है या बहुत संकीर्ण है।
एलेक्स समर्स

7

यह समाधान ऑनलाइन मिला , जिसने चर को रंगने के लिए एक कोष्ठक का सुझाव दिया:

इसे बदलो:

Black='\e[0;30m'        # Black
Red='\e[0;31m'          # Red
Green='\e[0;32m'        # Green

सेवा:

Black='\e[0;30m\]'        # Black
Red='\e[0;31m\]'          # Red
Green='\e[0;32m\]'        # Green

मैंने बदलाव किया है - उम्मीद है कि यह उम्मीद के मुताबिक काम करेगा।


1
सुनिश्चित नहीं है कि यह क्या हासिल करना है। आपको ऐसी किसी भी चीज़ को लपेटने की ज़रूरत है जो अंतरिक्ष में नहीं ले जाती है ( \[ \]एनी-एस्केप ) , इसलिए आप सभी एनी-एस्केप रंगों को समाप्त नहीं कर सकते \]क्योंकि अगर कोई नहीं है तो क्या होगा \[। जब आप गैर-मुद्रण योग्य वर्णों में डाल रहे हैं, तो आपको उन्हें केवल \[ \](जैसे PS1='\[\e[32;1m\] green prompt \[\e[0m\] $') में लपेटना चाहिए ।
dylnmc

वास्तव में! बिना उद्घाटन के [, यह हमारे लिए लिनक्स उपयोगकर्ताओं को संकेत देता है। शायद यह OSX के लिए अलग है? कितना अजीब है। लिनक्स के लिए दो अलग-अलग चीजों के रूप में व्याख्या की जाती है। पहला यह इंगित करने के लिए इंगित करता है कि निम्नलिखित अनुक्रम अप्राप्य है और इसे शीघ्र के प्रदर्शित वर्णों के भाग के रूप में नहीं गिना जा सकता है। ANSI रंग योजना प्रारंभ करने के लिए \ e [एस्केप ब्रैकेट है।
एलेक्स समर्स

0

बैश PS1 में लंबी लाइनों के ओवरलैप के मुद्दे के लिए मेरा पसंदीदा समाधान \nPS1 प्रॉम्प्ट लाइन (एस) के अंत में है।

जैसे

यहाँ छवि विवरण दर्ज करें

यदि आप मेरे सभी अन्य सामान चाहते हैं - समय, उपयोगकर्ता, होस्ट, निर्देशिका और गिट शाखा (!) तो आप इसका उपयोग कर सकते हैं (मैक या लिनक्स):

/unix//a/124012/10043


गिट शाखा के लिए आपको उपयोग करना चाहिए if [[ $(git rev-parse --is-inside-git-dir 2> /dev/null) ]]; then branch="$( git symbolic-ref --short -q HEAD 2> /dev/null )"; fi। यह एक मानक है जब एक स्क्रिप्ट में गिट लगाते हैं और मैंने पहले जो पढ़ा है, उससे शाखा के नाम का मूल्यांकन करता है।
21
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.