VREPRINT 似乎没有任何效果

VREPRINT 似乎没有任何效果

根据GNU 文档,有一个字符VREPRINTrprnt,这应该重新打印 shell 的行编辑器的输入缓冲区。如果在您输入另一个命令时,某个后台进程之类的东西已经写入 PTY,并且输出与您的输入交织在一起,那么这可能会很有帮助。但是,我尝试实际使用它,但似乎没有效果。我做了以下操作:

  1. sh在 Dockerhub 的最新镜像上运行会话alpine
  2. 使用stty将角色绑定rprnt^N
  3. 输入一些内容
  4. 从单独的会话写入第一个会话的 PTY。
  5. 尝试按 ctrl-N 重印我的输入

在此处输入图片描述

我期望它刷新我的输入并删除已写入的输出。然而,没有任何效果。仍有输出扰乱我的行编辑器。我已验证了这一点,icanoniexten已在此 PTY 上进行设置。

答案1

我假设您的 shell 是bash或其他具有全功能行编辑功能的 shell。

这些 shell 在等待您输入命令时,将 tty 模式设置为原始模式而不是规范模式,因此该rprnt设置不适用于它们。

命令行工具stty不会报告此情况,因为这些 shell 在行编辑期间会来回切换设置,而不是运行所请求的外部程序(例如stty它本身)。您可以通过stty -a < /dev/pts/[this-terminal's-number]在此终端处于提示符下时从另一个终端运行来确认这一点。

选择一个可以不是具有全面的行编辑功能,例如catdash类似功能。您会发现,stty rprnt ^N预先发出并按下^N确实会重新打印给定的行。至少我已经验证过,它对我来说是有效的。

对于具有强大行编辑功能的 shell,您必须查阅给定 shell 的文档(或者如果bash它是readline库)以了解如何重新打印提示或如何配置其热键。

相关内容