VREPRINTは効果がないようです

VREPRINTは効果がないようです

によるGNUドキュメント、キャラクターがいるVREPRINT、または はrprnt、シェルのライン エディターの入力バッファーを再印刷するはずです。これは、別のコマンドを入力しているときにバックグラウンド プロセスなどが PTY に書き込み、入力に出力が混在している場合に役立ちます。ただし、実際に使用してみましたが、効果がないようです。次の操作を実行しました。

  1. shDockerhub からの最新イメージでセッションを実行しますalpine
  2. 文字を にsttyバインドするために使用します。rprnt^N
  3. 入力してください
  4. 別のセッションから、最初のセッションの PTY に書き込みます。
  5. Ctrl + N を押して入力内容を再印刷してみてください

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

入力が更新され、書き込まれた出力が削除されることを期待していました。しかし、効果はありませんでした。行エディターが乱雑になっている出力がまだあります。それを検証しicanoniextenこの PTY に設定しました。

答え1

bashお使いのシェルは、フル機能の行編集機能を備えた他のシェルであると想定しています。

これらのシェルは、コマンドの入力を待機している間、tty モードを正規モードではなく raw モードに設定するため、rprnt設定は適用されません。

sttyこれらのシェルは、行編集中と要求された外部プログラム (それ自体など) の実行中とで設定を切り替えるため、コマンド ライン ツールはこれを報告しません。この端末がプロンプトになっている間に別の端末からstty実行することで、これを確認できます。stty -a < /dev/pts/[this-terminal's-number]

次のようなプログラムを選択してくださいないcatには、、または類似の本格的な行編集機能があります。 を事前にdash発行して を押すと、確かに指定された行が再印刷されることがわかります。少なくとも私は検証済みで、私の環境ではうまくいきました。stty rprnt ^N^N

強力な行編集機能を備えたシェルの場合、プロンプトを再印刷する方法やホットキーを構成する方法を確認するには、特定のシェルのドキュメント (またはライブラリの場合)bashを参照する必要があります。readline

関連情報