によるGNUドキュメント、キャラクターがいるVREPRINT
、または はrprnt
、シェルのライン エディターの入力バッファーを再印刷するはずです。これは、別のコマンドを入力しているときにバックグラウンド プロセスなどが PTY に書き込み、入力に出力が混在している場合に役立ちます。ただし、実際に使用してみましたが、効果がないようです。次の操作を実行しました。
sh
Dockerhub からの最新イメージでセッションを実行しますalpine
。- 文字を に
stty
バインドするために使用します。rprnt
^N
- 入力してください
- 別のセッションから、最初のセッションの PTY に書き込みます。
- Ctrl + N を押して入力内容を再印刷してみてください
入力が更新され、書き込まれた出力が削除されることを期待していました。しかし、効果はありませんでした。行エディターが乱雑になっている出力がまだあります。それを検証しicanon
、iexten
この PTY に設定しました。
答え1
bash
お使いのシェルは、フル機能の行編集機能を備えた他のシェルであると想定しています。
これらのシェルは、コマンドの入力を待機している間、tty モードを正規モードではなく raw モードに設定するため、rprnt
設定は適用されません。
stty
これらのシェルは、行編集中と要求された外部プログラム (それ自体など) の実行中とで設定を切り替えるため、コマンド ライン ツールはこれを報告しません。この端末がプロンプトになっている間に別の端末からstty
実行することで、これを確認できます。stty -a < /dev/pts/[this-terminal's-number]
次のようなプログラムを選択してくださいないcat
には、、または類似の本格的な行編集機能があります。 を事前にdash
発行して を押すと、確かに指定された行が再印刷されることがわかります。少なくとも私は検証済みで、私の環境ではうまくいきました。stty rprnt ^N
^N
強力な行編集機能を備えたシェルの場合、プロンプトを再印刷する方法やホットキーを構成する方法を確認するには、特定のシェルのドキュメント (またはライブラリの場合)bash
を参照する必要があります。readline