सिग्विन बैश प्रॉम्प्ट उसी लाइन पर लाइनों को लपेट रहा है


56

मैं Cygwin बैश प्रॉम्प्ट का उपयोग कर रहा हूं, और लंबे समय तक कमांड एक ही लाइन पर चारों ओर लपेटेगा, क्योंकि मेरे PS1 को केवल '$' सेट करने के बावजूद अगली पंक्ति में जाने का विरोध किया गया है।

यहाँ एक स्क्रीनशॉट है,
स्क्रीनशॉट


11
TERMपर्यावरण चर किसके लिए निर्धारित है? साइग्विन कंसोल के लिए, यह होना चाहिए cygwin
ak2

1
@ ak2 ने मेरे लिए यह समस्या तय की, धन्यवाद। मिंट्टी पर साइगविन।
जोशुआ

जवाबों:


58

मैं पहले से ही MinTTY का उपयोग कर रहा था, और PS1 में नईलाइन को हटाने से भी मदद नहीं मिली। इस पृष्ठ पर एक सलाह ने मदद की। मैंने इस बैश कमांड को अंजाम दिया:

kill -WINCH $$

मेरे मामले में, इसे चलाने के बाद एक बार इस मुद्दे को ठीक कर दिया, यहां तक ​​कि लॉग आउट करने और वापस अंदर आने के बाद भी, मुझे यकीन नहीं है कि यह हमेशा मामला है।


1
इसको देखते हुए -WINCH, यह बैश प्रक्रिया को संकेत देता है कि टर्मिनल विंडो को आकार दिया गया था। इसलिए यह प्रत्येक टर्मिनल विंडो के आकार बदलने के बाद किया जाना चाहिए, मुझे लगता है।
ivan_pozdeev

7
@ivan_pozdeev, मैंने पाया कि आपको केवल यह करना है कि आप आकार परिवर्तन कर रहे हैं, जबकि विम खुला है: vim को संकेत मिलता है और नए आकार में फिर से मिल जाता है, लेकिन यह अपनी मूल प्रक्रिया में पारित नहीं होता है और इस प्रकार bash अभी भी आकार को बढ़ाता है स्क्रीन वह है जो वह थी जब विम खोला गया था।
akatakritos

इसने मेरे लिए भी काम किया
konqui

यह मेरे लिए भी काम किया, धन्यवाद @jtpereyda!
जेसन आर। मिक

धन्यवाद, यह निश्चित रूप से मेरे लिए समस्या थी - विम के दौरान टर्मिनल का आकार बदलना। मुझे लगता है कि इस बग को ठीक करना काफी आसान होना चाहिए लेकिन मुझे नहीं पता।
इगुआनाउत

22

मेरे लिए, समाधान निम्न पंक्तियों को .bashrc में जोड़ने का था:

PS1='\[\e[32m\]\u@\h:\W> \[\e[0m\]'
TERM=cygwin
export PS1
export TERM

नोट प्रॉम्प्ट में प्रिंट न हो सकने पात्रों में सीमित होने चाहिए कि \[... \]


6
जैसा कि मूल प्रश्न के तहत एक टिप्पणी में @ ak2 द्वारा उल्लेख किया गया है, निर्यात TERM = cygwin समस्या को ठीक करने के लिए पर्याप्त है।
dregad 12

1
मेरे मामले में यह पर्याप्त नहीं था। यदि PS1 में एग्जिट सीक्वेंस होते हैं जो कि \ [... \] में संलग्न नहीं होते हैं, तो रैपिंग की समस्या बनी रहेगी। TERM env वैरिएबल सेट करना आपके मामले में पर्याप्त हो सकता है, लेकिन मुझे इसमें संदेह है।
डेकोरियो ड्यो

मेरे लिए यह समस्या उस समस्या को ठीक करती है जो दूसरी पंक्ति पहली पंक्ति को ओवरराइट करती है, हालाँकि जब तक मैं बिल्कुल 80 चौड़ाई टर्मिनल का उपयोग नहीं करता, कर्सर स्थिति और पाठ ऑफसेट अभी भी विस्की (साइबरविन 64, मिनिट 2.3.2 का उपयोग करके)
MM

मेरे लिए फिक्स्ड \ [... \] को जोड़ना।
Trismegistos

8

मुझे मिन्टटी के साथ भी यही समस्या थी। समस्या शायद प्राथमिक संकेत (PS1) के साथ कुछ करना है।

मेरे लिए समाधान PS1 से अंतिम 'नई लाइन' वर्ण ('$' चिह्न से ठीक पहले) निकाल रहा था:

user@host ~
$ echo $PS1
\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$

user@host ~
$ export PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\$ '

user@host ~ $

संदर्भ के लिए http://cygwin.com/ml/cygwin/2001-07/msg00140.html देखें ।

इस परिवर्तन को लगातार बनाए रखने के लिए, निर्यात PS1 = '[\ e] 0; \ w a] \ n [\ e [32m] \ u @ \ h [\ e [33m] \ w [\ e [0m] \ _ जोड़ें $ 'अपने ~ / .bashrc फ़ाइल में।


1
मेरे लिए काम नहीं किया ...
HDave

इसने मेरे लिए काम किया, लेकिन अंतिम नई पंक्ति को हटाने के अलावा मुझे सिग्विन टर्मिनल को भी फिर से शुरू करना पड़ा।
christosc

5

जैसा कि dregad और ak2 द्वारा टिप्पणी की गई थी , export TERM=cygwinमेरी ~/.bashrcफ़ाइल में सेटिंग मेरे लिए इस समस्या को ठीक करने के लिए पर्याप्त थी।


5

@ jtpereyda का जवाब निश्चित रूप से निशान पर है। लेकिन किसी कारण से मैं इसे जाने नहीं दे सका, और थोड़ा गहरा खोदा।

इस टिप्पणी पर विस्तार करते हुए , यदि आप vim में टर्मिनल का आकार बदलते हैं (या शेल से दूर किसी अन्य पूर्ण स्क्रीन अनुप्रयोग को लेता है), जिसके परिणामस्वरूप SIGWINCHअक्सर शेल को नहीं भेजा जाता है, इसलिए जब इसे वापस नियंत्रण प्राप्त होता है तो यह नहीं होता है 'पता है कि टर्मिनल का आकार बदल दिया गया है।

जब आप अपने टर्मिनल का आकार बदल लेते हैं, तो उसे ioctl(..., TIOCSWINSZ, ...)मास्टर पीटी पर कॉल करना चाहिए जो विम में चल रहा है। इसके परिणामस्वरूप killpg(SIGWINCH)विम के प्रक्रिया समूह में परिणाम होता है ।

समस्या यह है कि विम अपने स्वयं के प्रक्रिया समूह में चलाए जाने वाले शेल से अलग है, जिससे इसे निष्पादित किया गया था, इसलिए बैश शेल को प्राप्त नहीं होता है SIGWINCHऔर अपनी लाइनों / कॉलम को उचित रूप से समायोजित नहीं करता है।

यदि आप एक स्थायी समाधान चाहते हैं, तो shopt -s checkwinsizeअपने में जोड़ें .bashrc। यह ioctl(..., TIOCGWINSZ, ..)प्रत्येक आदेश से लौटने के बाद विंडो के आकार ( ) को बैश करता है , और इसकी पंक्तियों / स्तंभों को अपडेट करता है।


प्रश्न के साथ क्या करना है? ओपी विम का उपयोग नहीं कर रहा है।
DavidPostill

1
मेरा मतलब एक अलग सवाल है कि मुझे लगता है कि कनेक्शन को और अधिक स्पष्ट किया गया था, लेकिन संक्षेप में ओपी की समस्या का एक संभावित कारण पूर्ण टर्मिनल अनुप्रयोग खोलना है, जैसे कि टर्मिनल का आकार बदलना, और फिर बाहर निकलना। जैसा कि मैंने समझाया SIGWINCH खोल द्वारा नहीं देखा जाता है, इसलिए जब आप विम से बाहर निकलते हैं तब भी लगता है कि टर्मिनल पिछले आकार का है, जिसके परिणामस्वरूप विभिन्न लाइन रैपिंग मुद्दे हैं।
इगुआनाउत


2

आपकी टर्मिनल सेटिंग्स (शायद) में कुछ टूट गया है।
मुझे लगता है कि आप पहले से ही उस सत्र से बाहर निकलने और एक नया पुनरारंभ करने की कोशिश कर चुके होंगे।

जब आपको साइगविन टर्मिनल के लिए कोई समाधान नहीं मिलता है, तो मिन्टी को आज़माएं (वास्तव में बेहतर)।


1
मैं कई मशीनों में Cygwin में इस समस्या को देखता हूं, लेकिन MinTTY बेहतर दिखता है और रैपिंग समस्या को हल करता है। एक तीर से दो शिकार!
wting

ध्यान दें कि मिन्टीटी 2011 के बाद से Cygwin के लिए डिफ़ॉल्ट टर्मिनल है ।
ह्यू डब्ल्यू डब्ल्यू

1

जैसा कि akatakritos द्वारा टिप्पणी की गई थी , आपने संभवतः अपने टर्मिनल का आकार बदल दिया था, जबकि विम खुला था।

जब ऐसा होता है, तो बस टर्मिनल को एक बार फिर से आकार दें और समस्या दूर हो जाती है।


धन्यवाद! हालाँकि मैं साइबरविन का उपयोग नहीं कर रहा हूँ, लेकिन इसने "उसी लाइन पर रैपिंग" की समस्या को मेरे लिए बैश में तय कर दिया - बस टर्मिनल विंडो को अनमैक्सिज़्म कर दें, फिर इसे फिर से अधिकतम करें और समस्या दूर हो जाए :)
Nick Humphrey
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.