技术与生活 / 一篇记录
想看执行进度,也想保留输出
直接把输出重定向到文件后,终端可能长时间没有反馈。tee 位于数据通道中间,把相同内容复制到两个去处,适合保存构建摘要或实验结果。
先明确这里的区别
tee 把标准输入复制到终端和文件,适合观察正在执行的任务。
以下示例面向常见 GNU/Linux 环境,文件名为实验用占位名称。
printf 'build finished\n' | tee demo-build.log
怎样判断处理正确
确认终端输出与文件内容相同。
检查终端和文件是否同时出现同一条消息。错误输出默认不一定进入管道;需要一并保存时,应先弄清两个输出流的合并顺序。
如果管道前面的命令失败、tee 却成功写出了部分输出,管道整体状态可能令人误判。需要严格识别前段失败的 Bash 脚本,可结合 pipefail,并在受控样本里验证最终退出码。
需要留意的是,tee 默认覆盖文件;需要追加时明确使用 -a。
参考:Linux 文档。