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

Neu*_*ter 4 bash tee stdout exec

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

exec &>>/var/log/backup.log
Run Code Online (Sandbox Code Playgroud)

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

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

ori*_*ion 7

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

exec &> >(tee -a backup.log > overwritten.log)
Run Code Online (Sandbox Code Playgroud)

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