首页 > 解决方案 > 将 STDOUT 重定向到新窗口,将 STDERR 重定向到相同的新窗口以及日志文件

问题描述

我在 bash 脚本(其中之一)中有这个漫长的过程,所以我正在尝试将所有输出发送到一个单独的窗口进行监控,任何错误都记录到errorlog.txt。例如:

rsync -vahPz foo@bar:/bigfolder/ ./ >> /dev/pts/4 2>> errorlog.txt

问题是上面没有在单独的窗口上显示任何错误。

有没有办法将错误重定向到我的单独窗口 at/dev/pts/4 errorlog.txt,同时仍将正常输出重定向到/dev/pts/4

就像是:

rsyncblah >> /dev/pts/4 2>> errorlog.txt && /dev/pts/4

标签: bashstdoutstderrio-redirection

解决方案


您可以使用teewith process substitution,如下所示:

your_cmd 1> >(tee -a /dev/pts/2 >> out.log) 2> >(tee -a /dev/pts/2 >> err.log)

或者,您可以仅对 stderr 使用进程替换 - 因为它是必需的 - 并像往常一样通过管道重定向 stdout:

your_cmd 2> >(tee -a /dev/pts/2 >> err.log) | tee -a /dev/pts/2 >> out.log

推荐阅读