将 stdout 和 stderr 发送到文件、系统日志和终端

Jon*_*ver 9 shell bash io-redirection

对于我正在启动的某些云机器,我试图登录到特定文件、系统日志和终端/控制台。

在我的机器设置/云初始化脚本的顶部,我有以下内容:

#!/bin/bash
exec &> >(tee "/tmp/box-setup.log" | logger -t box-setup)
apt-get install -y some-package
Run Code Online (Sandbox Code Playgroud)

这在将输出发送到文件和系统日志方面效果很好,但它不会通过管道将输出传输到终端。

一般来说,没有终端输出并不是一个大问题,除非我从远程控制台调试。发生这种情况时,我完全失明了,因为 bash 脚本执行时控制台是空白的。

是否有使用bash重定向或其他方式将所有输出(标准输出和标准错误)同时传输到文件、系统日志和终端的简单方法?

我正在运行 Ubuntu 16.04。

hee*_*ayl 9

添加一个嵌套的进程替换和另一个tee在那里,如:

exec &> >(tee >(tee "/tmp/box-setup.log" | logger -t box-setup))
Run Code Online (Sandbox Code Playgroud)

tee主进程替换中的第一个将 STDOUT/STDERR 发送到终端,也发送到嵌套进程替换,tee将内容保存在文件/tmp/box-setup.log和管道中的内部也用于将输出发送到logger的 STDIN。