shell不使用最后一个命令状态写入文件

shell不使用最后一个命令状态写入文件,shell,Shell,如果我有以下命令 do_stuff -pram somepram 然后,我通常会执行以下操作来获取状态 if [ $OUT -eq 0 ]; then # do some stuff else # do other stuff fi 但是,我需要将do_stuff命令的输出写入一个文件 所以命令看起来像 do_stuff -pram somepram 2>&1 | tee someFile 这意味着$?的结果将是tee上的退出代码,并且没有继续执行它的命令

如果我有以下命令

do_stuff -pram somepram 
然后,我通常会执行以下操作来获取状态

if [ $OUT -eq 0 ]; then
    # do some stuff
else 
    # do other stuff
fi
但是,我需要将do_stuff命令的输出写入一个文件

所以命令看起来像

do_stuff -pram somepram 2>&1 | tee someFile
这意味着
$?
的结果将是
tee
上的退出代码,并且没有继续执行它的命令


是否有另一种写入文件的方法不影响此操作或允许我获取退出代码?命令退出状态与它产生的输出无关。如果命令表现良好,则可以编写:

if do_stuff -pram somepram > someFile
then
    : OK - it worked
else
    : Oops - it failed
fi
错误消息仍然转到标准错误。标准输出转到该文件。您甚至可以在成功时检查输出文件是否为空,将空文件视为失败,但如果命令表现良好,则不需要这样做


如果该命令表现不好,则所有赌注均无效。如果可能,请将错误归档并修复,以便返回可靠的退出状态。

如果要继续使用
tee
,可以在Bash脚本的顶部执行此操作:

set -o pipefail
如果管道的任何一级为非零,则管道的出口状态将为非零。

同样