将所有 bash 脚本输出(从脚本内部)重定向到两个文件:一个追加,一个重写;但丢弃控制台的输出

将所有 bash 脚本输出(从脚本内部)重定向到两个文件:一个追加,一个重写;但丢弃控制台的输出

我可以轻松地将 bash 脚本的标准输出和错误输出重定向到文件,同时使用简单的exec语句丢弃到控制台的输出:

exec &>>/var/log/backup.log

但是如何exec写入两个文件,附加到第一个文件并重写第二个文件?也许tee应该使用一些魔法。还应该找到一些使控制台静音的方法。

原因是我的备份脚本。我想将最新备份的事件附加到主日志中,并且只将这些事件写入当前备份日志(清除其以前的内容),每个备份会话都应该重写该日志。

答案1

可以做到,需要进程替换。将流重定向到子进程中,该子进程调用tee其余部分并将其重定向到被覆盖的文件中。

exec &> >(tee -a backup.log > overwritten.log)

请注意,这只会在整个脚本中覆盖文件一次,因为流保持打开状态,直到脚本退出或建立另一个重定向。

相关内容