我想根据命令的退出代码将命令的STDRR或STDUT重定向到文件或变量。也就是说,如果退出代码为零,那么我会将STDUT重定向到文件,否则我会重定向到STDRR。

最佳答案

不幸的是,如果不执行两次命令,就无法同时捕获stdout和stderr并将它们存储在不同的变量中。相反,您必须将输出重定向到不同的临时文件,然后根据退出代码保留所需的文件。例如:

#Send the output to different files
dosomething >tempout 2>temperr

case $? in
    0)
        mv tempout outfile.txt
        rm temperr;;
    1)
        mv temperr outfile.txt
        rm tempout;;
    2)
        mv tempout outfile.txt
        cat temperr >> outfile.txt
        rm temperr;;
    3)
        var=$(cat tempout)
        rm tempout temperr
    #...etc
esac

应该做这项工作。如果要将stderr(或两者)发送到变量,请不要忘记完成case语句。

07-25 22:58