bash:tee 在执行后吃换行符

bash:tee 在执行后吃换行符

为了将脚本中的 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很可能在收到换行符之前就被信号杀死了。

相关内容