shell 不使用上次命令状态写入文件

shell write to file without using last command status

如果我有以下命令

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

错误消息仍然转到标准错误。标准输出转到文件。您甚至可以在成功时检查输出文件是否为空,将空文件视为失败,但如果命令运行良好,则没有必要。

如果命令行为不当,那么所有的赌注都会被取消。如果可能的话,记录错误并修复它,以便它 returns 成为可靠的退出状态。

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

set -o pipefail

如果管道的任何阶段不为零,则管道的退出状态将为非零。