如何重定向程序,以便输出转到3文件
我试过
myprogram > file1 2> file2
但这并不满足3& 4。
编辑:如果屏幕在打印后立即显示消息会更好。 (以提高响应能力)
答案 0 :(得分:3)
(./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
运行程序,该实用程序可以避免此缓冲。
答案 1 :(得分:0)
myprogram > file1 2> file2 &> file3; cat file3
或者你认为cat file3
是在作弊?