如何stdin
在命令运行时停止ash
(而不是bash
)?
例如:
sleep 10
- 仍在运行
echo hello
时键入sleep
- 观察
hello
是在完成stdout
后sleep
期望:
sleep 10
- 仍在运行
echo hello
时键入sleep
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 意味着回显并将终端恢复到正常模式。