VREPRINT 似乎沒有任何效果

VREPRINT 似乎沒有任何效果

根據GNU 文檔, 有一個字符VREPRINT、 或rprnt,它應該重新列印 shell 的行編輯器的輸入緩衝區。如果在您鍵入另一個命令時後台進程之類的東西已寫入 PTY 並且輸出散佈在您的輸入中,這會很有幫助。然而我嘗試實際使用,似乎沒有什麼效果。我做了以下事情:

  1. sh在 Dockerhub 的最新映像上執行會話alpine
  2. 用於將字元stty綁定rprnt^N
  3. 輸入一些內容
  4. 從單獨的會話寫入第一個會話的 PTY。
  5. 嘗試按 ctrl-N 重新列印我的輸入

在此輸入影像描述

我期望它刷新我的輸入並刪除寫入的輸出。然而,沒有任何效果。我的行編輯器中仍然有輸出混亂。我已經驗證了這一點,icanoniexten已在該 PTY 上進行了設定。

答案1

我假設您的 shellbash或其他具有全功能行編輯功能的 shell。

這些 shell 在等待您鍵入命令時,將 tty 模式設為原始模式而不是規範模式,因此該rprnt設定不適用於它們。

命令列工具stty不會報告它,因為這些 shell 在行編輯期間與運行請求的外部程式(例如本身)期間來回切換設定stty。您可以透過stty -a < /dev/pts/[this-terminal's-number]在出現提示時從另一個終端運行來確認這一點。

選擇一個可以執行此操作的程序不是具有成熟的行編輯功能,例如catdash類似功能。您會發現stty rprnt ^N預先發出並且按下^N確實會重新列印給定的行。至少我已經驗證過並且它對我有用。

對於具有強大行編輯功能的 shell,您必須查閱給定 shell 的文檔(或如果是bashreadline)以了解如何重新列印提示或如何配置其熱鍵。

相關內容