关于 tee
用于 Agent 命令执行的技能,在只显示 `tail` 或 `head` 片段时保存完整输出,包括错误信息。它将日志写入唯一的临时目录,并说明哪些情况不适合采用这种捕获方式。
主要功能
- 01用 `tee` 捕获标准输出和错误
- 02使用唯一的 `mktemp -d` 目录
- 03保留可见的 `tail` 或 `head` 片段
- 04打印已保存的日志路径
- 05说明不应捕获输出的情况
适用场景
- 01检查测试输出尾部之前的错误
- 02显示构建开头内容的同时保存日志
- 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