我编写了一个程序,它从 shell 获取输入,然后输出结果。但是,当我使用管道时,输入没有回显。
$ ./a.out
$ /home/Wisatbff/file # input a pathname (echoed)
使用管道:
$ ./a.out | more
$ # input (same as above, not echoed)
两者都正确输出。为什么使用管道时输入没有回显?
我编写了一个程序,它从 shell 获取输入,然后输出结果。但是,当我使用管道时,输入没有回显。
$ ./a.out
$ /home/Wisatbff/file # input a pathname (echoed)
使用管道:
$ ./a.out | more
$ # input (same as above, not echoed)
两者都正确输出。为什么使用管道时输入没有回显?
编辑(之前的答案是错误的,我误解了这个问题):
该命令more
正在更改您的终端配置。
找出您正在启动的 tty,./a.out | more
并从另一个 tty(或任何其他热终端)运行此命令:
stty -F /dev/yourTTY echo
您将在控制台上再次出现回声
也许您正在使用伪终端,但stty
命令也应该可以工作。
例如:
ps ax | grep $$ | awk '{ print $2 }'
./a.out | more
stty -F /dev/resultFromFirstStep echo
编辑:
顺便说一句,如果有人感兴趣,您可以查看如何more
更改终端阅读代码源:
void set_tty () {
otty.c_lflag &= ~(ICANON|ECHO);
otty.c_cc[VMIN] = 1; /* read at least 1 char */
otty.c_cc[VTIME] = 0; /* no timeout */
stty(fileno(stderr), &otty);
}
它正在夺走 ECHO 和 ICANON。