1

我编写了一个程序,它从 shell 获取输入,然后输出结果。但是,当我使用管道时,输入没有回显。

$ ./a.out
$ /home/Wisatbff/file       # input a pathname (echoed)

使用管道:

$ ./a.out | more
$                           # input (same as above, not echoed)

两者都正确输出。为什么使用管道时输入没有回显?

4

1 回答 1

1

编辑(之前的答案是错误的,我误解了这个问题):

该命令more正在更改您的终端配置。

找出您正在启动的 tty,./a.out | more并从另一个 tty(或任何其他热终端)运行此命令:

stty -F /dev/yourTTY echo

您将在控制台上再次出现回声

也许您正在使用伪终端,但stty命令也应该可以工作。

例如

  1. 找出您当前的终端:ps ax | grep $$ | awk '{ print $2 }'
  2. 运行你的命令:./a.out | more
  3. 打开新终端并运行以下命令:stty -F /dev/resultFromFirstStep echo
  4. 检查您的第一个终端是否有回声。

编辑:

顺便说一句,如果有人感兴趣,您可以查看如何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。

于 2013-10-25T16:43:11.783 回答