如何重定向我的程序,以便输出转到 3 个文件,以便
- 标准输出转到文件1
- stderr 转到文件2
- stdout 和 stderr 的组合结果按其原始顺序转到 file3
- 重定向时,输出也会在程序运行时打印到屏幕上
我试过了
myprogram > file1 2> file2
但这并不能满足3和4。
编辑:如果屏幕在打印后立即显示消息会更好。(提高响应能力)
(./foo.sh > >(tee out.log) 2> >(tee err.log >&2)) |& tee all.log
我们在这里做了什么? 首先,我们创建两个子壳来运行tee out.log
和tee err.log
,并将适当的描述符重定向到它们。 我们小心翼翼地将stdout
从err.log
重定向回它所属的stderr
,否则它会搞砸out.log
(这个想法归功于 https://stackoverflow.com/a/692407/4323)。 其次,我们将整个东西放在一个子外壳中,以便我们可以一次将其stdout
和stderr
重定向到all.log
,再次使用tee
同时打印到屏幕上。
需要注意的是,我们正在运行的程序在不是TTY/PTY(终端设备)时可能会缓冲标准输出。 如果您需要从屏幕上和文件中的stdout
立即输出,您可以尝试使用 unbuffer
运行程序,这是一个避免这种缓冲的实用程序。
myprogram > file1 2> file2 &> file3; cat file3
还是你认为cat file3
在作弊?