2

我有一个调用 jar 文件的 bash 脚本,如下所示:

awk -f fileformat.awk list.txt | while read arg1 arg2 arg3 arg4 arg5; do    
    java -jar /bin/2dbf.jar arg1 arg2 arg3 arg4 arg5

    if [[ ${?} -eq 0 ]]; then
        echo "2dbf.jar finished at: `date "+%F %T"`"
        echo "---------------------------------------------"
    else
        echo "exiting..."
        exit 10
    fi
done

看起来像这样:如果该fileformat.awk行以开头#或没有 5 个字段退出程序。

{ 
    if (NF == 5 && $1 !~ /#.*/) {
        print $0 
    } else { 
        print "incorrect file format"
        "exit 1"
    }
}

我想要的是exit 1awk脚本中终止整个 shell 脚本。但实际上它没有,并且 jar 文件由于错误的选项而引发异常。

4

1 回答 1

6

因为您在 AWK 程序中exit使用引号,所以它正在生成一个子shell 并从中退出并且因为您将错误消息打印到stdout,这会提供while循环。将您的 AWK 脚本更改为此,它应该可以工作:

{ 
    if (NF == 5 && $1 !~ /#.*/) {
        print $0 
    } else { 
        print "incorrect file format" > "/dev/stderr"
        exit 1
    }
}
于 2012-07-14T05:52:00.673 回答