
xterm端末(列80×24行)を開き、を実行して端末のファイル名を取得し$ bash --norc --noprofile
ます$ tty
。出力はです/dev/pts/9
。
別の端末で実行します。
$ printf foo >/dev/pts/9
foo
最初の端末のシェルはコマンドラインに印刷されます。 [実行]をクリックすると
(関数名で指定)、削除されません。 11個のスペースを挿入してを押すと、スペースは削除されますが削除されません。 12個のスペースを挿入してを押すと、スペースも削除されます。C-u
unix-line-discard
$ bind -P | grep -i c-u
foo
C-u
foo
C-u
foo
カーソルがすぐ後ろにあるときに押すと、なぜ削除できなくなり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に関する重要な質問ではなく、理由を見つけようとしませんでした)。