输入未与管道回应

时间:2013-10-25 16:34:24

标签: shell

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

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

使用管道:

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

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

1 个答案:

答案 0 :(得分:1)

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

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

找出你正在启动./a.out | more的tty并从另一个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. 检查您的第一个终端是否有回音。
  5. 编辑:

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