我做了一个练习来编写一个程序来执行以下管道处理:
ls -la | grep "^d" | more
然后执行我的程序后,bash解释器不会破坏行也不会正确显示命令,但是在执行它们之后会显示结果,看起来控制台的输入没有进入stdout但是在其他地方我无法找到这种行为的原因。
我正在使用3个子进程,重定向stdio来连接它们之间的管道。
程序成功完成它显示了良好的结果,没有显示错误或者其他什么,当我使用cat而不是更多的一切在执行后正常工作时,是否有可能更多的更改某些系统值并且不会更改它们回来?
答案 0 :(得分:0)
more
可能会关闭你的TTY上的回声和规范模式(参见man 3 termios
),并且在它退出之前永远不会将它们重新打开(因为它在没有机会的情况下被杀死,或者因为它认为它不附属于TTY)。您可以使用gdb附加到more
以找出原因,或者您可以在退出之前自行重置终端。