mcpField
T
tee

tee

github.com/petr-korobeinikovAgent 工作流153 次安装14 周前更新
代码仓库

关于 tee

用于 Agent 命令执行的技能,在只显示 `tail` 或 `head` 片段时保存完整输出,包括错误信息。它将日志写入唯一的临时目录,并说明哪些情况不适合采用这种捕获方式。

主要功能

  1. 01用 `tee` 捕获标准输出和错误
  2. 02使用唯一的 `mktemp -d` 目录
  3. 03保留可见的 `tail` 或 `head` 片段
  4. 04打印已保存的日志路径
  5. 05说明不应捕获输出的情况

适用场景

  1. 01检查测试输出尾部之前的错误
  2. 02显示构建开头内容的同时保存日志
  3. 03命令执行后搜索已保存的日志

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/petr-korobeinikov/skills --skill tee

安装后在 Claude Code 中输入/tee确认已加载。

详细介绍

tee

当 Agent 运行命令时,直接通过管道传给 tail -n N 能让 聊天内容保持简洁 — 却会悄悄丢弃尾部之前的所有行, 包括级联故障中的第一个错误、 导致摘要出现的警告, 或更早的任何线索。

解决方法只需插入一个令牌: 在 tail/head 阶段之前添加 tee "$log", 让完整输出写入 mktemp -d 目录中的文件。 可见的输出片段保持原样。 后续可以通过 Read、grep、tail、head 查看该文件。

规则

log=$(mktemp -d)/out.log
cmd 2>&1 | tee "$log" | tail -n 100
echo "full log: $log"
  • 使用 mktemp -d 分配目录, 而不是硬编码 /tmp/... 路径 — 每次调用 mktemp -d 都会在标准输出中返回一个唯一的私有目录; 硬编码路径会与并发运行发生冲突, 也会受到之前运行留下的状态影响。
  • 在 tee 之前将标准错误重定向到标准输出(2>&1), 这样错误和警告也会写入文件。
  • 通过 tail -n N(或 head -n N)管道输出,以保留可见片段; 故障尾部和摘要使用 tail, 重要信息出现在开头时使用 head。
  • 在最后一行打印完整日志路径, 以便通过 Read、grep、tail、head 重新打开文件。

不适用的情况

  • 简短且有界的输出。 原本就没必要使用 | tail -n N — 直接删掉管道即可 (git status、git rev-parse、command -v foo、 单行 jq 查询)。
  • 预期会产生极长输出 — 例如 find /、在庞大目录树中执行 grep -r, 或会输出数十 MB 内容的详细软件包安装。 将完整流写入临时文件会占满磁盘,却没有实际收益。 保持命令采用原本的写法 (| tail -n N 并接受输出丢失), 或先从源头缩小输出范围 (--quiet、--summary、-q、 各工具自己的过滤器)。
  • 交互式命令(vim、less、REPL)— 管道会破坏其界面。
  • 人类正在实时关注的输出 — 例如用户正在查看的服务器日志上的 tail -f。

示例

不佳 — 直接通过管道传给 tail 会丢弃之前的输出:

npm test 2>&1 | tail -n 100

良好 — 插入 tee,将输出写入临时文件:

log=$(mktemp -d)/out.log
npm test 2>&1 | tee "$log" | tail -n 100
echo "full log: $log"

当重要信息出现在开头时,也可使用 head,形式相同:

log=$(mktemp -d)/out.log
make build 2>&1 | tee "$log" | head -n 50
echo "full log: $log"

命令执行后,可以直接读取打印出的路径 — 例如,扩大同一输出片段的范围(使用更大的 N 调用 tail/head), 按关键字搜索(grep), 或读取已知的行范围(Read):

tail -n 500 "$log"
head -n 200 "$log"
grep -nE 'error|fail|warning' "$log"

适用范围

适用于 Agent 运行的命令 — 主要是 Bash 工具调用 以及 Agent 自己执行的 scripts/ 下的 shell 片段。 展示给人类读者的片段 (安装说明、可复制粘贴的示例) 不使用此模式, 除非人类也要求捕获输出。

评论

支持 Markdown