このbashコマンドラインを消去するには、なぜ12文字を入力するのですか?

このbashコマンドラインを消去するには、なぜ12文字を入力するのですか?

xterm端末(列80×24行)を開き、を実行して端末のファイル名を取得し$ bash --norc --noprofileます$ tty。出力はです/dev/pts/9

別の端末で実行します。

$ printf foo >/dev/pts/9

foo最初の端末のシェルはコマンドラインに印刷されます。 [実行]をクリックすると
(関数名で指定)、削除されません。 11個のスペースを挿入してを押すと、スペースは削除されますが削除されません。 12個のスペースを挿入してを押すと、スペースも削除されます。C-uunix-line-discard$ bind -P | grep -i c-ufoo
C-ufoo
C-ufoo

ここに画像の説明を入力してください。

カーソルがすぐ後ろにあるときに押すと、なぜ削除できなくなりfoo、削除するには12文字を入力する必要がありますか?C-u


環境:

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

ベストアンサー1

他のプログラムがtty間の通信fooに印刷すると、/dev/pts/9シェルは交換に参加せず、印刷された文字数がわからず、文字が印刷されたかどうかはわかりません。シェルはまだ削除する文字がないと思います。実際にfoo端末に印刷してバックスペースキーで削除しようとすると動作しません。シェルは存在しないコンテンツを削除しようとしません。

--norc --noprofileコマンドを使用して端末でこれを試してください。

bash-4.3$ printf 'some text'

取得するには:

some textbash-4.3$

バックスペースキーは現在何も削除しません。何も削除されませんctrl-u。一部の文字(最大11文字)を入力すると、ctrl-u入力した内容のみが削除されます。 (バックスペースキーも同じです)しかし、文字が11個より多い場合、コマンドは行の先頭とctrl-u思われる部分(多くの文字を消去するより速い方法)に戻り、次のプロンプトが残ります。

some textb

私の考えでは、これはバグと見なすことができます(bash 5.0にはまだ存在します)。ただし、このオプションを使用しないと、bash-5から20文字(OPの場合は18文字)に変更されます--norc --noprofile(IMnshOに関する重要な質問ではなく、理由を見つけようとしませんでした)。

おすすめ記事