このbashコマンドラインをクリアするために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がtty間の通信に、シェルは交換に参加せず、印刷された文字数や、文字が印刷された場合でも認識できません。シェルは、消去する文字がないとまだ信じています。実際、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にまだ存在する)と見なすことができます。ただし、--norc --noprofileオプションを使用しない場合、bash-5の20(OPの場合は18)文字に変更されます(IMnshOのような重要な問題ではなく、理由を見つけようとしませんでした)。


答えてくれてありがとう。2番目のバグに関して$ printf 'some text'、を使用すると、--norc --noprofile17文字以上を挿入しなくてもbash 5.0で再現できます。
user938271

@ user938271正解、問題は20文字で再現され、回答に情報が追加されました、ありがとう。
アイザック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.