为了将脚本中的 stdout 和 stderr 输出到控制台和日志文件,我找到了一个带有 tee 的漂亮解决方案:
exec &> >(tee log.file)
问题是,有时 tee 似乎正在吃换行符。例如,我在退出时有一个陷阱,它打印换行符然后才退出。
trap "echo && exit 55" EXIT HUP INT QUIT KILL
它使 shell 从新行打印提示符,而不是^C
在脚本运行时用户可能按下的任何地方打印提示符。当有这样的 exec 调用时,它不起作用。
答案1
此方法将 stderr 重定向到 stdout,然后通过管道传输到 tee。我认为它更具可读性。
exec 2>&1 | tee log.file
我已经在我的机器上对此进行了测试,并且没有遇到“换行符吃”问题。
答案2
tee
很可能在收到换行符之前就被信号杀死了。