इस बैश कमांड-लाइन को क्लियर करने के लिए मुझे 12 अक्षर डालने की आवश्यकता क्यों है?


14

मैं एक xterm टर्मिनल (80 कॉलम x 24 लाइन) खोलता हूं, फिर रन करता हूं $ bash --norc --noprofile, और फिर $ ttyटर्मिनल का फाइल नाम पाने के लिए: आउटपुट है /dev/pts/9

दूसरे टर्मिनल से मैं चलता हूं:

$ printf foo >/dev/pts/9

fooपहले टर्मिनल में शेल कमांड-लाइन पर मुद्रित होता है।
अगर मैं C-uचलाने के लिए unix-line-discard(द्वारा दिए गए फ़ंक्शन का नाम) को दबाता हूं $ bind -P | grep -i c-u, fooतो हटाया नहीं जाता है।
यदि मैं 11 स्थान सम्मिलित करता हूं और दबाता हूं C-u, तो रिक्तियां हटा दी जाती हैं, लेकिन नहीं foo
यदि मैं 12 स्थान सम्मिलित करता हूं और दबाता हूं C-u, तो रिक्तियां भी हटा दी जाती हैं foo

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

fooजब मैं C-uअपने कर्सर को इसके ठीक बाद दबाता हूं तो मैं क्यों नहीं हटा सकता, और मुझे इसे हटाने के लिए 12 वर्ण डालने की आवश्यकता क्यों है?


वातावरण:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.6 LTS
Release:        16.04
Codename:       xenial

$ bash --version | head -n1
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)

$ xterm -version
XTerm(322)

जवाबों:


19

जब किसी अन्य प्रोग्राम प्रिंट fooकरने के लिए /dev/pts/9संचार ttys के बीच है, खोल विनिमय में भाग लेने नहीं है, यह कितने वर्ण मुद्रित कर रहे थे या यहां तक कि अगर किसी भी चरित्र मुद्रित किया गया था के बारे में पता नहीं हो सकता। खोल अभी भी विश्वास कर रहा है कि मिटाने के लिए कोई वर्ण नहीं हैं। वास्तव में, यदि आप fooटर्मिनल पर प्रिंट करते हैं और इसे बैकस्पेस के साथ मिटाने की कोशिश करते हैं तो यह काम नहीं करता है। शेल यह मिटाने की कोशिश नहीं करता है जो यह मानता है कि वह नहीं है।

उस टर्मिनल में प्रयास करें जहां आपने --norc --noprofile कमांड का उपयोग किया था:

bash-4.3$ printf 'some text'

लेना:

some textbash-4.3$

उस बिंदु पर बैकस्पेस कुछ भी नहीं मिटाएगा। इसके अलावा ctrl-uकुछ भी नहीं मिटाएगा। यदि आप कुछ अक्षर टाइप करते हैं (उनमें से 11 तक) ctrl-uकेवल वही टाइप करेगा जो टाइप किया गया था (जैसा कि बैकस्पेस करता है)। लेकिन जब 11 से अधिक वर्ण होते हैं, तो कमांड ctrl-uवापस वही जाएगा जो इसे लाइन की शुरुआत मानता है (कई पात्रों को मिटाने का तेज़ तरीका) जो इस संकेत को छोड़ देगा:

some textb

इसे बग IMO माना जा सकता है (अभी भी bash 5.0 में मौजूद है)। लेकिन bash-5 में 20 (ओपी के लिए) वर्णों में परिवर्तन यदि --norc --noprofileविकल्पों का उपयोग नहीं किया जाता है (मैंने कारण खोजने की कोशिश नहीं की है, ऐसा महत्वपूर्ण मुद्दा IMnshO नहीं)।


जवाब के लिए धन्यवाद। दूसरे बग के बारे में $ printf 'some text', --norc --noprofileअगर मैं 17 वर्ण या अधिक सम्मिलित करता हूं, तो मैं बग 5.0 पर पुन: पेश कर सकता हूं।
user938271 22

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