如何重定向我的程序,从而使输出为3档,使得重定向程序输出
- 标准输出去到file1
- 标准错误去到file2
- 输出和错误的综合结果去在其原始为了FILE3
- 虽然重定向,输出也输出到屏幕作为在程序运行
我试图
myprogram > file1 2> file2
但这并不满足3 & 4.
编辑:这将是更好的,如果在屏幕上显示在打印后立即的消息。 (提高响应能力)
如何重定向我的程序,从而使输出为3档,使得重定向程序输出
我试图
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
是欺骗?
这根本不起作用,因为'&>'撤销'>'和'2>'。 –
它在我的Mac上运行得很好。 – user14717
那么它不适用于OP询问的Linux。奇怪。我有Bash 4.1.5,你可能有一个更老的。 –
可能的重复[如何在使用管道使用“tee”时将stderr写入文件?](http://stackoverflow.com/questions/692000/how-do-i-write-stderr-to- a-file-while-using-tee-with-a-pipe) –