bash - 将 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
解决方案
您可以使用tee
with 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
推荐阅读
- kubernetes - 从 Prometheus helm 图表向 slack 发送警报
- flutter - 使用 FCM 以编程方式发送通知
- alfresco - alfresco - 如何使用 java 添加 nodeRef 作为另一个节点的新版本?
- simulation - N个粒子的发散
- tensorflow - Tensorflow.js - 如何为简单求和创建模型
- javascript - JavaScript(或 TypeScirpt)冒号和竖线
- python - 在 YouTube 上自动执行人工操作
- node.js - 为什么 _this.debug 在这个测试中不是一个函数?
- azure - 是否可以更改 Azure PIM 通知事件?
- apache-spark - 将 Matlabplot 保存为 MLFlow 工件