如何将输出重定向到stdout&文件并获取管道中第一个命令的返回值?

时间:2016-02-11 19:36:03

标签: bash pipe io-redirection

我已经阅读了this answer,并且最适合我正在寻找的内容,除非它错过了如何从第一个命令获取返回值。这样做会给出命令tee的返回值代码,这不是我正在寻找的。

示例:

ls /path/to/dir 2>&1 | tee foo.txt
echo $?

$?将显示ls的代码。

我如何实现上述目标?

编辑:谢谢你的回答,Benjamin W.!但是,我应该更具体一点:我需要bash 提示(不是脚本)来返回它;因为返回只能从脚本或函数的角度来看,我最好的办法是将它包装在一个函数中,然后。这是对的吗?

编辑2:这就是我要找的东西:

fn() { ls | tee foo.txt return ${PIPESTATUS[0]} return ${PIPESTATUS[0]} } fn

1 个答案:

答案 0 :(得分:2)

有一个环境变量PIPESTATUS

  

一个数组变量(参见Arrays),其中包含最近执行的前台管道(可能只包含一个命令)中的进程的退出状态值列表。

因此ls的退出状态将在${PIPESTATUS[0]}