如何在getline管道中获取命令的退出状态?

 playingbest 发布于 2023-01-31 21:13

在POSIX awk中,如何通过处理输出command 获取退出状态(返回代码)command | getline varexit 1如果command以非零退出状态退出,我想要我的awk脚本.

例如,假设我有一个名为的awk脚本foo.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

根据awk的POSIX规范,command | getline成功输入返回1,文件结束返回0,错误返回-1.如果command退出具有非零退出状态,则不是错误,因此不能用于查看是否command已完成且已失败.

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

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

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有