如何重定向我的程序,以便输出到 3 个文件,这样
- stdout 转到 file1
- stderr 转到文件 2
- stdout 和 stderr 的组合结果以其原始顺序进入 file3
- 重定向时,程序运行时也会将输出打印到屏幕上
我试过了
myprogram > file1 2> file2
但这不满足3和4。
编辑:如果屏幕在消息打印后立即显示会更好。 (以提高响应能力)
最佳答案
(./foo.sh > >(tee out.log) 2> >(tee err.log >&2)) |& tee all.log
我们在这里做了什么?首先,我们创建两个子 shell 来运行 tee out.log
和 tee err.log
,并将适当的描述符重定向到它们。我们小心地将stdout
从err.log
重定向回它所属的stderr
,否则会把out.log<弄乱
(此想法归功于 https://stackoverflow.com/a/692407/4323)。其次,我们将整个东西放在一个子 shell 中,这样我们就可以将它的 stdout
和 stderr
一次性重定向到 all.log
,再次使用tee
同时打印到屏幕。
需要注意的是,我们正在运行的程序在不是 TTY/PTY(终端设备)时可能会缓冲 stdout。如果您需要从屏幕和文件中的 stdout
立即输出,您可以尝试使用 unbuffer
运行您的程序。 ,一种避免这种缓冲的实用程序。
关于linux - 重定向程序输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27893573/