पढ़ते समय बैकस्पेस कैसे संभालें?


10

मैं दर्ज किए गए बैकस्पेस को कैसे संभाल सकता हूं, यह दिखाता है ^?कि यदि readवर्णों को कैसे आज़माया जाए और कैसे गिना जाए, क्योंकि 12^?3पहले से ही 5 वर्ण पूर्ण थे (हालांकि उनमें से सभी वास्तविक इनपुट नहीं थे), लेकिन 12^?3^?इसके तुरंत बाद , अजीब लौट आया। कृपया सहायता कीजिए!

-bash-3.2$ read -n 5
12^?3^?-bash-3.2$

जवाबों:


10

जब आप सादे read(या read -rअन्य विकल्पों के साथ पूरी लाइन पढ़ते हैं जो इस व्यवहार को प्रभावित नहीं करते हैं), तो कर्नेल प्रदान लाइन संपादक Backspaceएक चरित्र को मिटाने की कुंजी को पहचानता है , साथ ही साथ कुछ अन्य कमांड ( Returnइनपुट को समाप्त करने के लिए भी) लाइन और इसे भेजें)। शॉर्टकट कुंजियों को उपयोगिता के साथ कॉन्फ़िगर किया जा सकता हैstty । टर्मिनल तब कहा जाता है जब उसका लाइन एडिटर सक्रिय हो। कच्चे मोड में, कीबोर्ड पर टाइप किया गया प्रत्येक वर्ण तुरंत एप्लिकेशन को प्रेषित होता है। पके हुए मोड में, वर्ण एक बफर में संग्रहीत किए जाते हैं और केवल पूर्ण लाइनें एप्लिकेशन को प्रेषित की जाती हैं।

वर्णों की एक निश्चित संख्या के बाद पढ़ना बंद करने के लिए ताकि लागू करने के लिए read -n, बैश को कच्चे मोड पर स्विच करना पड़े । कच्चे मोड में, टर्मिनल Backspaceकुंजी का कोई प्रसंस्करण नहीं करता है (जब तक आप दबाते हैं Backspace, तब तक पूर्ववर्ती चरित्र को पहले से ही काटने के लिए भेजा गया है), और बैश या तो कोई प्रसंस्करण नहीं करता है (संभवतः क्योंकि यह अधिक लचीलापन देता है स्क्रिप्ट को अपनी प्रोसेसिंग करने की अनुमति देना)।

आप -eबैश के अपने लाइन एडिटर (रीडलाइन, जो कि एक उचित लाइन एडिटर है, कर्नेल के बेहद कच्चे एक की तरह नहीं) को सक्षम करने का विकल्प पास कर सकते हैं । चूँकि बैश लाइन संस्करण कर रहा है, यह एक बार पढ़ना बंद कर सकता है, क्योंकि इसमें पात्रों की अनुरोधित संख्या होती है।


9

उपयोग करें read -e:

$ read -e -n 5
13acX

read -e मतलब कि:

लाइन प्राप्त करने के लिए रीडलाइन ( कमांड लाइन एडिटिंग देखें ) का उपयोग किया जाता है।

जब आप ऐसा करते हैं, तो आप इनपुट को किसी भी तरीके से संपादित कर सकते हैं, जब आप नियमित शेल प्रॉम्प्ट पर लिखते हैं, जिसमें बैकस्पेस Home, और इसी तरह शामिल हैं।


1

readबैश बिलिन है। (देखें type read।) आप के साथ प्रलेखन पा सकते हैं man bash:

   read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
   [...]
          -e     If the standard input is coming from a terminal, readline (see READLINE above) is used to obtain the line.
                 Readline uses the current (or default, if line editing was not previously active) editing settings.

या आप उपयोग कर सकते हैं help read:

read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
      -e                use Readline to obtain the line in an interactive shell

-eस्विच ReadLine समर्थन जो मूल रूप से बैकस्पेस से निपटने सहित सभी सुरक्षा प्रॉम्प्ट पर उपलब्ध सुविधाओं की अनुमति देता है, सक्षम बनाता है।

इसलिए read -en 5आपको जो चाहिए वो करना चाहिए।


-वह समस्या का समाधान करता है लेकिन readपढ़ता है कि 'दर्ज वर्णों की संख्या' अभी भी अनुत्तरित है।
कीशोव बोराटे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.