我正在尝试使用 bash 的交互模式实现一个简单的终端 GUI。我成功调用了 bash,获取了它的标准输出并将所有内容打印到文本视图中。我将用户输入从文本视图转发到 bash 的stdin,以便能够运行命令。它工作得很好,除了我没有收到任何错误消息。
但是,当我继续将 bash 的stderr打印到我的文本视图时,我注意到了一些奇怪的事情。除了现在接收错误消息之外,bash 似乎将所有内容从stdin传递到stderr。因此,我输入的每个字符都会打印两次(通常一次是因为我输入了它,一次是因为我从stderr打印了所有内容)。
它似乎也通过stderr ( bash-3.2$
) 打印提示。这是预期的行为吗?这能被压制吗?
我还尝试仅捕获使用输入(而不是让用户直接在文本视图中键入)并依靠 bash 来打印用户输入。这几乎可以正常工作,除了通过stdout和stderr的输出顺序是随机的:
如果我输入一个类似的命令echo test
并按回车,有时我会得到这个:(
第二个test
是输出,我没有输入testtest
)
bash-3.2$ echo testtest
bash-3.2$
有时我会得到:
bash-3.2$ echo test
bash-3.2$ test
我收到 final \n
、 output 和 next的顺序bash-3.2$
显然是混淆了。