变量中的复杂命令

时间:2014-11-05 08:39:49

标签: bash shell


我正在编写一个脚本,其中包括多次运行shell命令。此命令不能很好地处理退出代码,我需要知道进程是否成功结束。
所以我想的是分析 stderr 来找出错误这个词(使用grep)。我知道这不是最好的事情,我正在努力.... 无论如何,我能想象的唯一方法是将该程序的 stderr 放在变量中,然后使用grep,“grep”它并将其抛给另一个变量。然后我可以看看该变量是否有价值,这意味着存在错误,并完成我的工作 qustion是:我怎么能这样做? 我真的不想在里面运行变量,因为它有很多参数(带反斜杠,引号,双引号等特殊字符)并且它是一个内存而我/ O密集型计划。
等待你的回复,谢谢。

3 个答案:

答案 0 :(得分:0)

将该命令的stderr重定向到临时文件,并检查该文件中是否存在“error”字样。

mycommand 2> /tmp/temp.txt
grep error /tmp/temp.txt

答案 1 :(得分:0)

谢谢@Jdamian,最后这也是我的答案。
我问我的校长是否可以写一个临时文件并允许,所以这是最终结果:

... script 
command to be launched -argument -other "argument" -other "other" argument 2>&1 | tee $TEMPFILE
ERRORCODE=( `grep -i error "$TEMPFILE" `)
if [ -z $ERRORCODE ] ;
    then
    some actions ....

我还没有对此进行测试,因为我之前需要编写其他一些脚本。 我要做的是:

  • 运行命令,将其stderr重定向到stdout;
  • 使用tee,将上述结果打印在屏幕上,也打印到临时文件中;
  • 使用grep将临时文件(如果有)上的字符串错误存储在名为ERRORCODE的变量中;
  • 如果填充了该变量(这意味着它是由grep创建的),那么脚本将停止,退出状态1,否则它将继续。

您怎么看?

答案 2 :(得分:0)

如果您不需要标准输出:

if mycommand 2>&1 >/dev/null | grep -q error; then
   echo an error occurred
fi