shell在不使用last命令状态的情况下写入文件

时间:2015-01-21 05:02:16

标签: 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上的退出代码,并且没有命令继续执行。

是否有其他方法可以写入不会干扰此文件或允许我获取退出代码的文件

2 个答案:

答案 0 :(得分:2)

命令退出状态与其生成的输出无关。如果命令表现良好,那么您可以写:

if do_stuff -pram somepram > someFile
then
    : OK - it worked
else
    : Oops - it failed
fi

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

如果命令不正常,则所有投注均已关闭。如果可能的话,提交错误并修复它以使其返回可靠的退出状态。

答案 1 :(得分:0)

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

set -o pipefail

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