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

Bash中使用tee时如何获取原命令的返回错误码?

实现方法:保留原命令返回码同时用tee输出到文件

完全可行,以下是几种常用实现方式:

方法1:使用bash的PIPESTATUS数组

bash的PIPESTATUS数组会记录管道中每个命令的返回值,其中${PIPESTATUS[0]}对应管道第一个命令的返回码。

示例代码:

cp -unknown-args "hello" | tee test.txt
echo "return code is ${PIPESTATUS[0]}"

执行后输出:

cp: invalid option -- 'k'
Try 'cp --help' for more information.
return code is 1

方法2:开启pipefail选项

开启pipefail后,整个管道的返回码会等于管道中最后一个执行失败(返回非零)的命令的返回码。如果原命令失败、tee成功,管道整体返回原命令的错误码。

示例代码:

# 开启pipefail选项
set -o pipefail
cp -unknown-args "hello" | tee test.txt
echo "return code is $?"
# 可选:关闭pipefail选项
set +o pipefail

执行后输出与方法1一致。

方法3:POSIX兼容的进程替换方式

如果需要在非bash的POSIX shell中实现,可以用进程替换捕获原命令的返回码,同时保证输出实时写入文件:

示例代码:

ret=0
cp -unknown-args "hello" > >(tee test.txt) || ret=$?
echo "return code is $ret"

这种方式无需依赖bash特有特性,兼容性更广。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:27:12