Linux 重定向程序输出
我如何重定向我的程序,使输出转到3个文件,这样Linux 重定向程序输出,linux,bash,unix,Linux,Bash,Unix,我如何重定向我的程序,使输出转到3个文件,这样 stdout转到文件1 stderr转到文件2 stdout和stderr的组合结果按其原始顺序进入文件3 重定向时,程序运行时,输出也会打印到屏幕上 我试过了 myprogram > file1 2> file2 但这并不能满足3和4的要求 编辑:如果在打印消息后屏幕立即显示消息会更好。(以提高响应能力)myprogram>file12>file2&>file3;cat文件3 或者你认为猫的文件3是作弊吗 (./foo.sh >
myprogram > file1 2> file2
但这并不能满足3和4的要求
编辑:如果在打印消息后屏幕立即显示消息会更好。(以提高响应能力)
myprogram>file12>file2&>file3;cat文件3
或者你认为猫的文件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
搞砸(这一想法归功于)。其次,我们将整个内容放在一个子shell中,这样我们可以将其stdout
和stderr
一次性重定向到all.log
,再次使用tee
同时打印到屏幕上
一个警告是,我们正在运行的程序可能会在stdout不是TTY/PTY(终端设备)时缓冲它。如果您需要屏幕和文件上的
stdout
的即时输出,您可以尝试使用一个实用程序运行程序,该实用程序可以避免这种缓冲。可能与OP询问的Linux不起作用的情况相同。奇怪。我有Bash 4.1.5,你可能有一个旧版本。我有版本3.2.53
。是的,Mac OS卡在一个非常旧的Bash上。