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