linux 结束管道命令返回,awk – 如何在getline管道中获取命令的退出状态?

在POSIX awk中,如何通过命令|处理其输出后从命令获取退出状态(返回代码) getline var?如果命令以非零退出状态退出,我希望我的awk脚本退出1.

例如,假设我有一个名为foo.awk的awk脚本,如下所示:

function close_and_get_exit_status(cmd) {

# magic goes here...

}

BEGIN {

cmd = "echo foo; echo bar; echo baz; false"

while ((cmd | getline line) > 0)

print "got a line of text: " line

if (close_and_get_exit_status(cmd) != 0) {

print "ERROR: command '" cmd "' Failed" | "cat >&2"

exit 1

}

print "command '" cmd "' was successful"

}

然后我希望发生以下情况:

$awk -f foo.awk

got a line of text: foo

got a line of text: bar

got a line of text: baz

ERROR: command 'echo foo; echo bar; echo baz; false' Failed

$echo $?

1

根据POSIX specification for awk,命令| getline为成功输入返回1,为文件结束返回0,为错误返回-1.如果命令以非零退出状态退出,则不是错误,因此不能用于查看命令是否已完成且失败.

类似地,close()不能用于此目的:close()仅在关闭失败时返回非零,而不是在关联命令返回非零退出状态时返回非零. (在gawk中,close(命令)返回命令的退出状态.这是我想要的行为,但我认为它违反了POSIX规范,并不是所有的awk实现都是这样的.)

awk system()函数返回命令的退出状态,但据我所知,没有办法使用getline.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值