在管道之前返回命令的代码



我正在尝试验证rpms,在while循环中分配一些变量,并在循环内进行更多处理。

    while read fstatus fname rc
    do
       echo "RC : ${lrc}" 
    done < <(rpm --verify apache2 | awk -vrc=$? '{printf "%s %s %s", $1, $NF, rc}')

循环中有几件事,只有当我的返回代码不是 0 时,我才想做(所以只有当 rpm 验证失败时)。我不知道如何获取 rpm --验证循环内的返回代码。$?PIPESTATUS 赋值不起作用。我想我的问题是,管道之后的命令(在我的例子中是awk)是否会知道管道之前的命令的返回代码(rpm --在这种情况下验证)。

试试这个:

rpm --verify apache2 > tempfile && awk -vrc=$? '{printf "%s %s %s", $1, $NF, rc}' tempfile

这样,只有当 rpm --verify 成功时,才会执行 awk。如果失败,awk 将不会运行,您将在 $?? 中获得它的状态。

像这样的事情怎么样(将 RC 的值作为字符串传递):

while read fstatus fname rc
do
  echo "RC : ${lrc}" 
done < <( { v=$(rpm --verify apache2); printf "%sn" "$v $?" ;} | awk '{printf "%s %s %sn", $1, $(NF-1), $NF}') 

请注意,awk printf 中的n是正确馈送读取循环所必需的。

---编辑----了解到RC需要打印在每一行上。也许这样更合适:

done < <( v=$(rpm --verify apache2) ; awk -v rc=$? '{printf "%s %s %sn", $1, $NF, rc}' <<< "$v" )

--刚刚看到了另一个解决方案。我想唯一的区别是写入文件或变量。

相关内容

  • 没有找到相关文章

最新更新