bash शेल प्रॉम्प्ट लाइन रैपिंग मुद्दा




colors prompt (8)

मैंने ओएस एक्स (10.5.7) टर्मिनल में अपने बैश शेल प्रॉम्प्ट को तोड़ने के लिए कुछ किया है।

यह PS1 है जिसे मैंने कॉन्फ़िगर किया था:

PS1='\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\$ '

जहां तक ​​मैं बता सकता हूं कि मेरे पास सही ढंग से भागने वाले रंग कमांड हैं। हालाँकि जब मैं अपने कमांड हिस्ट्री में ऊपर और नीचे स्क्रॉल करता हूँ तो मुझे कई बार लाइन रैपिंग इश्यू मिल जाते हैं अगर ऐतिहासिक कमांड्स कई लाइनों पर लपेटते हैं।

मैंने निम्नलिखित के लिए अपने संकेतों को सरल बनाया:

PS1='\[\e[1m\]\h:\w\$ \[\e[0m\]'
PS2='> '

और मुझे अभी भी कुछ इस तरह दिखाई देता है:

localhost:~/Library/Application Support/Firefox/Profiles/knpmxpup.Defau
lt/extensions/{1A2D0EC4-75F5-4c91-89C4-3656F6E44B68}$ expocd \{1A2D0EC4-7
5F5-4c91-89C4-3656F6E                                           export PS1="\[
\e[1;32m\]\h\[\e[0m\]:                                          cd Library/Appl
ication\ Support/

मैंने भी \e बजाय \033 की कोशिश की है। मैंने पीएस 2 को जानकारी के लिए वहां शामिल किया है, मैंने इसे इंस्टॉल डिफ़ॉल्ट से नहीं बदला है। अगर मैं पूरी तरह से रंग कोड हटाता हूं तो सब कुछ ठीक काम करता है, कोई विचार?


बैश में लाइन रैपिंग के मुद्दे कोई नई बात नहीं है। मेलिंगलिस्ट से परामर्श करें, हो सकता है कि इस बारे में अभी कोई और बग न हो।

आप अनपेक्षित वर्णों को टैग करने से ज्यादा कुछ नहीं कर सकते, बाकी सब शीघ्र कोड द्वारा किया जाना चाहिए।


यहाँ मेरा है: यह सबसे अच्छा एक है जो मैंने पाया है, लेकिन साइट जहां मुझे मूल रूप से मिला यह एक एस्केप चरित्र को याद कर रहा था, जिससे लाइन रैपिंग मुद्दा हो गया। मैंने इसके साथ छेड़छाड़ की और आखिरकार यह काम कर गया। यह आपके उपयोगकर्ता, पथ और शाखा जानकारी को अच्छे कंट्रास्ट, रंग-वार के साथ दिखाता है।

export PS1='\[\e[1;37m\]\[\e[1;32m\]\u\[\e[0;39m\]:\[\e[1;33m\]\w\[\e[0;39m\]\[\e[1;35m\]$(__git_ps1 " (%s)")\[\e[0;39m\] \[\e[1;37m\]|\[\e[0;39m\]\$'

इसके अलावा, जोड़ें

GIT_PS1_SHOWDIRTYSTATE=true

एक शाखा दिखाने के लिए जब एक शाखा "गंदी" होती है (परिवर्तन होने के लिए मौजूद होता है)

export HISTCONTROL=ignoredups

बैश इतिहास के माध्यम से स्क्रॉल करते समय डुप्लिकेट को अनदेखा करने के लिए भी उपयोगी है।

bind "set completion-ignore-case on" 

मदद भी करता है।

अंततः,

shopt -s checkwinsize

अगर समस्या बनी रहती है तो OSX पर मददगार हो सकता है।


'shopt -s checkwinsize' साइगविन रैप समस्याओं के लिए भी काम करता है


भविष्य के संदर्भ के लिए, यह मेरा उपयोग है:

export PS1="\[\033[0;31m\][\[email protected]:\w]$\[\033[0m\] "

यह मेरे शेल प्रॉम्प्ट को इस प्रकार प्रदर्शित करेगा:

[[email protected]:~]$

मुझे लाइव और देव साइटों के बीच अंतर करने में मदद करता है।


यह स्टैकओवरफ़्लो थ्रेड प्रासंगिक लगता है। जैसा कि किसी ने उस सूत्र में उल्लेख किया है, mywiki.wooledge.org पर बैश एफएक्यू पर चर्चा की गई है कि कैसे बैश संकेतों ( एफएक्यू 53 ) में रंग कोडों को ठीक से उद्धृत किया जाए, और टर्मिनल रंगों ( एफएक्यू 37 ) का उचित आह्वान किया जाए।


मैंने देखा कि PS1 या PROMPT वातावरण चर में कोई विशेष वर्ण नहीं होने पर भी प्रॉम्प्ट कर्सर पोजिशनिंग के साथ कुछ समस्याएँ हैं।

यदि हम ऐसी फ़ाइल का उत्पादन करते हैं जिसमें अंत में लाइन-ऑफ-द-चार नहीं है। यह प्रॉम्प्ट को भ्रमित करेगा।

आप ऐसा करके पुन: पेश कर सकते हैं:

curl https://gist.githubusercontent.com/martinos/d4aa0a7d4d752b0d0d9f/raw/3198c39f84a080c44227a084a19fb3a0bb661ee5/wrapping_issue.txt

और कई बार ऊपर की ओर दबाने पर आप देखेंगे कि प्रॉम्प्ट गड़बड़ हो गया है।

आप कार्रवाई में इसका एक उदाहरण देख सकते हैं:

https://asciinema.org/a/9mtjhi9dib6md4ocsbw210cca

जब ऐसा होता है, तो बस <CTRL-C> दबाएं और प्रॉम्प्ट सामान्य पर वापस आ जाएगा।

ध्यान दें कि ZShell में यह समस्या नहीं है।


यदि आप टाइटल बार ट्रिक "\e]2;titlebar\a" का उपयोग कर रहे हैं "\e]2;titlebar\a" , तो "\e]2;titlebar\a" भी बचना सुनिश्चित करें: "\[\e]2;titlebar\a\]"


मैं अब अच्छे प्रभाव के साथ इस PS1 का उपयोग कर रहा हूं:

green=$(tput setaf 2)
blue=$(tput setaf 4)
bold=$(tput bold)
reset=$(tput sgr0)
PS1="\[$green$bold\]\h\[$reset\]:\[$blue$bold\]\w\[$reset\]\$ "

मेरे कमांड इतिहास के माध्यम से स्क्रॉल करना अब लाइन रैप्स को संभालना प्रतीत होता है। हालाँकि इस बीच जब से यह सवाल पूछा गया था मैंने भी अपने OS X को 10.6.3 में अपडेट किया है





ansi-escape