我想根据命令的退出代码将命令的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语句。