我编写了一个从shell获取输入然后输出结果的程序。但是,当我使用管道时,输入不会被回显。
$ ./a.out
$ /home/Wisatbff/file # input a pathname (echoed)
使用管道:
$ ./a.out | more
$ # input (same as above, not echoed)
两者输出正确。使用管道时为什么不回显输入?
答案 0 :(得分:1)
命令more
正在改变您的终端配置。
找出你正在启动./a.out | more
的tty并从另一个tty(或任何其他传感器)运行此命令:
stty -F /dev/yourTTY echo
你将在你的控制台上再次回声
也许您正在使用伪终端,但stty
命令也可以正常工作。
例如:
ps ax | grep $$ | awk '{ print $2 }'
./a.out | more
stty -F /dev/resultFromFirstStep echo
编辑:
顺便说一句,如果有人感兴趣,您可以看到more
如何更改终端阅读code source:
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。