0

我有一个练习来编写一个将执行以下管道处理的程序:

ls -la | grep "^d" | more

然而,在执行我的程序后,bash解释器不会换行也不会正确显示命令,但是在执行它们后显示结果,看起来控制台的输入没有进入标准输出,而是在其他地方,我找不到原因这种行为。

我正在使用 3 个子进程和 stdio 重定向来连接它们之间的管道。

程序成功完成它显示了良好的结果,没有显示错误或其他什么,当我使用 cat 而不是更多时,执行后一切正常,是否有可能更多地更改某些系统值并且不会将它们改回来?

4

1 回答 1

0

这很可能more是关闭了 TTY 上的回声和规范模式(请参阅 参考资料man 3 termios),并且在退出之前永远不会重新打开它们(因为它在没有机会的情况下被杀死,或者因为它认为它没有连接到 TTY) . 您可以附加到moregdb 以找出发生这种情况的原因,或者您可以在退出之前自行重置终端。

于 2013-06-24T10:28:30.603 回答