Bu bash komut satırını silmek için neden 12 karakter eklemem gerekiyor?


14

Bir xterm terminali açıyorum (80 sütun x 24 satır), sonra çalıştırıyorum $ bash --norc --noprofileve sonra $ ttyterminalin dosya adını almak için: çıktı /dev/pts/9.

Başka bir terminalden çalıştırıyorum:

$ printf foo >/dev/pts/9

foobirinci terminaldeki kabuk komut satırına yazdırılır. Çalıştırmak için
tuşuna C-ubasarsam unix-line-discard(tarafından verilen işlevin adı $ bind -P | grep -i c-u) fookaldırılmaz.
11 boşluk ekleyip tuşuna C-ubasarsam, boşluklar kaldırılır ancak kaldırılmaz foo.
12 boşluk ekler ve basarsam C-u, boşluklar da kaldırılır foo.

resim açıklamasını buraya girin

Neden kaldıramazsınız fooben bastığımda C-ubenim imleç sağ sonra ise, ve neden çıkarmak için 12 karakter eklemek gerekir?


Çevre:

$ 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)

Yanıtlar:


19

Bazı diğer program baskılar zaman fooiçin /dev/pts/9iletişim uçbirim arasındadır, kabuk o basıldı veya herhangi bir karakter baskılı olsa bile kaç karakter farkında olamaz, karşılığında katılmaz. Kabuk hala silinecek karakter olmadığına inanıyor. Aslında, footerminale yazdırır ve geri tuşu ile silmeye çalışırsanız çalışmaz. Kabuk, orada olmadığına inandığı şeyi silmeye çalışmaz.

--Norc --noprofile komutunu kullandığınız terminalde deneyin:

bash-4.3$ printf 'some text'

almak:

some textbash-4.3$

Bu noktada geri tuşu hiçbir şeyi silmez. Ayrıca ctrl-uhiçbir şey silmez. Bazı karakterler yazarsanız (en fazla 11 karakter) ctrl-uyalnızca yazılanları kaldırır (geri silme gibi). Ancak 11'den fazla karakter olduğunda, komut ctrl-usatırın başlangıcına (birçok karakteri silmenin daha hızlı bir yolu) inandığı şeye geri döner ve bu istemi bırakır:

some textb

Bu bir hata IMO (hala bash 5.0'da mevcut) olarak düşünülebilir. Ancak --norc --noprofileseçenekler kullanılmazsa bash-5'de 20 (OP için 18) karaktere değişir ( sebebini bulmaya çalışmadım, IMnshO gibi önemli bir sorun değil).


Cevap için teşekkür ederim. İkinci hatayla ilgili olarak, 17 veya daha fazla karakter $ printf 'some text'eklesem bash 5.0'da çoğaltabilirim --norc --noprofile.
user938271

@ user938271 Doğru, sorun benim için 20 karakterde yeniden üretildi, cevaba bilgi eklendi, teşekkürler.
Isaac
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.