命令运行时停止 stdin

命令运行时停止 stdin

如何stdin在命令运行时停止ash(而不是bash)?

例如:

  1. sleep 10
  2. 仍在运行echo hello时键入sleep
  3. 观察hello是在完成stdoutsleep

期望:

  1. sleep 10
  2. 仍在运行echo hello时键入sleep
  3. sleep观察 shell,就像运行时没有输入任何内容一样

我希望解决方案是这样的:tput <stop stdin>; sleep 10; tput <restart stdin>; <enter>

这不会出现在 shell 脚本中(仅需要与交互式 shell 一起使用)。

答案1

stty -echo禁用终端的回显,但是如果您输入某些内容,它将被记住并且 shell 将获取输入的密钥。

然后,在离开之前,stty echo(恢复回显模式),并使用此程序耗尽终端输入:

#include <stdio.h>
#include <unistd.h>
#include <termios.h>

int main(void)
{
    tcflush(0, TCIFLUSH);
    return 0;
}

整个事情将会是stty raw -echo;sleep 10;stty sane;./my_program

使用raw,避免CtrlC CtrlZ干扰。 Sane 意味着回显并将终端恢复到正常模式。

相关内容