【发布时间】:2016-05-22 07:24:49
【问题描述】:
我想根据命令的退出代码将命令的标准错误或标准输出重定向到文件或变量。即,如果退出代码为零,那么我会将 stdout 重定向到文件,否则我将重定向到 stderr。
【问题讨论】:
我想根据命令的退出代码将命令的标准错误或标准输出重定向到文件或变量。即,如果退出代码为零,那么我会将 stdout 重定向到文件,否则我将重定向到 stderr。
【问题讨论】:
不幸的是,如果不执行两次命令,就无法同时捕获 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 语句。
【讨论】:
试试这样的:
a) 捕获输出:
OUT=`grep -c test myfile.txt`
b) 根据位于特殊变量$? 中的退出状态重定向(同时不做任何其他事情)环境变量OUT:
if [ "$?" -eq 0 ];
then
echo "succes with output=$OUT";
else
echo "failure with output=$OUT";
fi
当然,您必须将第二部分完全放在第一部分之后,以便在$? 中保持正确的值。
如果输出太大;先重定向到一个临时文件,然后根据退出码重命名临时文件。
【讨论】: