You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现错误输出重定向不覆盖文件并同步打印内容

问题修正方案

你当前使用的命令存在几处不符合需求的问题:

  • tee命令默认以覆盖模式写入文件,会清空output.log原有内容,不符合不覆盖旧内容的要求
  • 命令缺少执行完成后打印output.log全量内容的逻辑
  • 重定向逻辑如果仅需收集错误信息的话存在错误,会把正常输出也一并写入日志

仅保存命令错误信息的正确命令

如果需求是只把命令运行产生的错误信息存入日志,正常输出不写入,执行以下命令:

script ./src/ 2>&1 >/dev/null | tee -a output.log && cat output.log

各部分作用:

  • >/dev/null:将命令正常的标准输出直接丢弃,不进入后续传输链路
  • 2>&1:把标准错误流重定向到标准输出通道,错误信息会通过管道传给后续命令
  • tee -a output.log:-a是追加写入参数,会把收到的错误信息追加到output.log末尾,不会覆盖原有内容,同时会把接收到的内容实时打印到终端
  • && cat output.log:等前面的命令执行完毕、所有内容写入日志后,打印output.log的全部内容

保存命令全部输出(含正常输出+错误)的正确命令

如果实际需要把命令的所有输出(正常运行输出+报错信息)都存入日志,执行以下命令:

script ./src/ 2>&1 | tee -a output.log && cat output.log

各部分作用:

  • 2>&1:将标准错误流合并到标准输出流,所有运行输出都会通过管道传输
  • tee -a output.log:追加写入所有内容到output.log,同时实时在终端打印输出
  • && cat output.log:命令执行完成、日志写入结束后,打印output.log全量内容

补充说明:script命令默认会把终端会话内容录制到后面跟的文件路径参数里,如果你的./src/是要执行的目标路径而非录制保存文件,需要加-c参数指定要执行的命令,比如script -c "ls ./src/" 2>&1 | tee -a output.log && cat output.log,这部分可以根据你实际要执行的操作调整。

内容的提问来源于stack exchange,提问作者chillin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:18:22