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。
添加一个嵌套的进程替换和另一个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。