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

无需使用tee:将命令输出同时重定向至终端和文件并保留输入功能

不用tee实现交互式命令的输出分流(终端显示+日志追加)

因为目标应用与tee配合时输入处理异常,我们可以用纯shell重定向语法实现需求,确保应用的输入交互不受影响,同时支持日志追加:

核心方案(无外部依赖,仅用shell内置功能)

command > >(cat >> foo.log) 2> >(cat >> foo.log >&2)

方案说明

  • >(cat >> foo.log):利用shell的进程替换创建匿名管道,将命令的标准输出(stdout)传递给cat进程,cat会把内容追加写入foo.log,同时默认输出到当前终端。
  • 2> >(cat >> foo.log >&2):对标准错误(stderr)做同样处理,确保错误信息同时记录到日志并显示在终端,>&2保证错误信息输出到终端的stderr通道,保留原输出格式/颜色。
  • 全程未使用管道|,目标应用的标准输入(stdin)直接连接当前终端,完全保留原有输入交互能力。

进阶:临时全局重定向(适用于多命令场景)

如果需要连续执行多个命令都实现输出分流,可通过exec设置全局重定向,之后恢复:

# 保存当前终端的stdout/stderr到文件描述符3/4
exec 3>&1 4>&2
# 将后续所有命令的stdout/stderr同时追加到日志并输出到终端
exec 1> >(cat >> foo.log) 2> >(cat >> foo.log >&2)

# 执行你的命令
command1
command2

# 恢复原有的stdout/stderr
exec 1>&3 2>&4 3>&- 4>&-

替代方案(适配需检测TTY的应用)

如果目标应用需要识别真实TTY终端(进程替换的管道可能被判定为非TTY),可直接将输出指向当前终端设备:

# 获取当前终端路径
TTY=$(tty)
# 同时输出到日志和终端
command > >(cat >> foo.log > "$TTY") 2> >(cat >> foo.log > "$TTY")

内容的提问来源于stack exchange,提问作者T. Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:10:36