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

无法修改远程脚本时,如何合并stdout与stderr并双向输出?

解决方案

方法1:单命令即时合并双写

直接给目标命令套一层重定向,把stdout和stderr合并后同时输出到两个流:

your_command 2>&1 | tee /dev/stderr
  • 2>&1:把stderr的内容转到stdout,实现两者合并
  • tee /dev/stderr:把合并后的内容同时输出到stdout(tee默认输出)和stderr(写入/dev/stderr设备)

不管远程脚本检测到退出码是0还是非0,它显示的stdout或stderr里都会包含原始的所有输出信息。

方法2:全局批量设置重定向

如果要给多个命令统一配置,可以提前用exec做全局重定向:

exec > >(tee /dev/stderr) 2>&1
your_command
# 后续其他命令也会自动应用这个输出规则
  • exec > >(tee /dev/stderr):把之后所有命令的stdout指向一个进程,这个进程会把内容同时输出到stdout和stderr
  • 2>&1:把stderr也重定向到这个进程,确保所有输出都被双写

关于退出码的补充

默认情况下tee的退出码是0,会覆盖原始命令的退出码。如果需要远程脚本能拿到原始命令的真实退出码,加上pipefail选项:

set -o pipefail
your_command 2>&1 | tee /dev/stderr

这样管道的退出码会等于原始命令的退出码,不会影响远程脚本的判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 15:06:12