【问题标题】:Redirect the ouput of an interactive command to file and terminal将交互式命令的输出重定向到文件和终端
【发布时间】:2011-08-17 16:18:22
【问题描述】:

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

tee program.in | program

我还必须在另一个文件中捕获 stdout 和 stderr。这就是诀窍

tee program.in | program > program.out 2>&1

问题是用户输入将基于程序之前输出的内容,因此用户必须在终端中查看程序输出。

你知道如何做到这一点吗?

【问题讨论】:

    标签: bash redirect stdin


    【解决方案1】:

    另一个更惯用的tee :-?,即

    tee program.in | program 2>&1 | tee program.out
    

    我希望这会有所帮助。

    附:由于您似乎是新用户,如果您得到对您有帮助的答案,请记住将其标记为已接受,和/或给它一个 +(或 -)作为有用的答案。

    【讨论】:

    • 不幸的是它不起作用。虽然输出被写入文件,但它不会在终端中打印。我可以打开终端并执行tail -f program.out,但输出是缓冲的,不会立即出现。
    • 如果输出被缓冲,那么tee 也会延迟显示它。尝试用unbuffer 包装program(如果它在您的系统上可用)。祝你好运。
    • 另一个解决方案(我在查看 Stack Overflow 档案时发现了这一点)是用 script 包装所有内容。像 script -c "tee grid09.in | grid09" -f grid09.out 这样的东西可以完成工作。
    • 哦。这就是你正在做的事情。好的,对于未来的问题,您的用例的快速总结将有助于更快地获得答案。祝你好运,感谢 chk 标记。
    猜你喜欢
    • 2012-11-15
    • 2017-12-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    相关资源
    最近更新 更多