将交互式命令的输出重定向到文件和终端

3

我有一个需要用户输入的程序,我使用 tee 将其保存到文件中:

tee program.in | program

我还需要将标准输出(stdout)和标准错误(stderr)保存到另一个文件中。可以使用以下方法实现:
tee program.in | program > program.out 2>&1

问题在于用户输入将基于程序之前输出的内容,因此用户必须在终端中看到程序的输出。
有什么想法可以实现这一点吗?
1个回答

3
另一种更符合惯用语的tee命令是:-?,即:
tee program.in | program 2>&1 | tee program.out

我希望这能帮到你。
附言:由于你似乎是新用户,如果你得到了有用的答案,请记得将其标记为已接受,并/或给予它一个+(或-)作为有用的答案。

不幸的是它不起作用。虽然输出被写入文件,但它没有在终端中打印出来。我可以打开终端并执行 tail -f program.out,但输出被缓冲,不能立即显示。 - Marius Retegan
如果输出被缓冲,则“tee”在显示输出时也会延迟。尝试使用“unbuffer”包装“program”(如果您的系统上有该命令)。祝好运。 - shellter
2
另一个解决方案(我在查看 Stack Overflow 档案时发现的)是将所有内容都包装在 script 中。类似这样的 script -c“tee grid09.in | grid09”-f grid09.out 可以完成任务。 - Marius Retegan
哦,原来你是这样做的。好的,对于未来的问题,简要概述您的用例将有助于更快地获得答案。祝你好运,感谢您的勾选标记。 - shellter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接