使用“exec()”函数执行更多操作会破坏bash中的换行符

时间:2013-06-24 09:42:00

标签: c linux bash

我做了一个练习来编写一个程序来执行以下管道处理:

ls -la | grep "^d" | more

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

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

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

1 个答案:

答案 0 :(得分:0)

more可能会关闭你的TTY上的回声和规范模式(参见man 3 termios),并且在它退出之前永远不会将它们重新打开(因为它在没有机会的情况下被杀死,或者因为它认为它不附属于TTY)。您可以使用gdb附加到more以找出原因,或者您可以在退出之前自行重置终端。