我正在尝试验证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 --verify返回码。 $?或 PIPESTATUS 分配不起作用。 我想我的问题是,管道之后的命令(在我的情况下是awk)会在管道之前知道命令的返回码(在这种情况下是rpm --verify)。
答案 0 :(得分:0)
这样的事情(将RC的值作为字符串传递):
while read fstatus fname rc
do
echo "RC : ${lrc}"
done < <( { v=$(rpm --verify apache2); printf "%s\n" "$v $?" ;} | awk '{printf "%s %s %s\n", $1, $(NF-1), $NF}')
请注意,awk printf中的\n
是正确提供读取循环所必需的。
--- ----编辑 据悉RC需要在每一行打印。也许这会更合适:
done < <( v=$(rpm --verify apache2) ; awk -v rc=$? '{printf "%s %s %s\n", $1, $NF, rc}' <<< "$v" )
- 刚看到其他解决方案。我想唯一的区别是写入文件或变量..
答案 1 :(得分:0)
试试这个:
rpm --verify apache2 > tempfile && awk -vrc=$? '{printf "%s %s %s", $1, $NF, rc}' tempfile
这样只有在rpm --verify成功时才会执行awk。如果失败,awk将无法运行,您将在$?中获得它的状态。