मैं अपने बैश प्रॉम्प्ट को पॉप्युलेट करने के लिए बाहरी कमांड का उपयोग कर रहा हूं, जो प्रत्येक बार पीएस 1 का मूल्यांकन होता है। हालांकि, मुझे एक समस्या है जब यह आदेश गैर-प्रिंट करने योग्य वर्णों (जैसे रंग से बचने वाले कोड) आउटपुट करता है।बैश पीएस 1: बाहरी कमांड से गैर-प्रिंटिंग वर्णों के साथ लाइन रैप समस्या
$ cat green_cheese.sh
#!/bin/bash
echo -e "\033[32mcheese\033[0m"
$ export PS1="\$(./green_cheese.sh) \$"
cheese $ # <- cheese is green!
cheese $ <now type really long command>
PS1 प्रॉम्प्ट में गैर मुद्रण पात्रों के साथ काम कर के विहित तरीका उन्हें \[
और \]
भागने दृश्यों में संलग्न करने के लिए है: यहाँ एक उदाहरण है।
$ cat green_cheese.sh
#!/bin/bash
echo -e "\[\033[32m\]cheese\[\033[0m\]"
$ export PS1="\$(./green_cheese.sh) \$"
\[\]cheese\[\] $ # <- FAIL!
वहाँ एक विशेष एस्केप अनुक्रम मैं बाहरी आदेश से उपयोग कर सकते हैं वांछित परिणाम प्राप्त करने है: समस्या यह है कि अगर आप इस बाहरी आदेश से कर उन पलायन PS1 दुभाषिया द्वारा पार्स नहीं किया जाता है? या क्या कोई तरीका है कि मैं मैन्युअल रूप से प्रॉम्प्ट बता सकता हूं कि त्वरित चौड़ाई को सेट करने के लिए कितने वर्ण हैं?
मान लें कि मैं बाहरी कमांड से कुछ भी पसंद कर सकता हूं, और यह आदेश काफी बुद्धिमान हो सकता है (उदाहरण के लिए, आउटपुट में वर्णों की गणना करना)। मैं आवश्यकतानुसार export PS1=...
कमांड भी बना सकता हूं। हालांकि, रंगों के लिए बचने के कोड बाहरी कमांड से आना चाहिए।
अग्रिम धन्यवाद!
धन्यवाद। यह पूरी तरह से काम करता है! असल में, अब मैं उपयोग करने के लिए बचने वाले कोडों को जानता हूं, मुझे आपके द्वारा संदर्भित अन्य पोस्ट मिलती हैं: http://stackoverflow.com/a/22706988/341459 http://stackoverflow.com/a/14637194/341459 http://stackoverflow.com/a/19501528/341459 –
आप पूरी तरह से सही हैं। '001' और' \ 002', उर्फ आरएल_PROMPT_START_IGNORE और RL_PROMPT_END_IGNORE, एक खराब दस्तावेज [रीडलाइन सुविधा] हैं (http://git.savannah.gnu.org/cgit/readline.git/tree/display.c?id= fb914b20839322c962918590b3ea449555d7d9f9 # n262)। बैश '\ [.. \] 'से' 001 .. \ 002' को रीडलाइन के रूप में परिवर्तित करता है, लेकिन मौजूदा लोगों से बचने के लिए उपेक्षा करता है ताकि यह कार्यान्वयन विस्तार (और यह इतना उपयोगी हो कि आप इसे शायद ही कभी एक बग कह सकें)। –
जब मैंने हालिया पोस्ट पर 'PROMPT_COMMAND' देखा था तो मुझे यह प्रश्न याद आया और यह वापस चला गया लेकिन ऐसा लगता है कि विचार पहले से ही दिया गया था। मुझे यह भी विचार था कि बैश वास्तव में '\ [' और '\]' के वर्णों का उत्पादन कर रहा है और इसे जांचने की कोशिश की लेकिन 'ttyrec' का आउटपुट सिर्फ भ्रमित था इसलिए मैंने अभी छोड़ दिया। +1 बीटीडब्ल्यू – konsolebox