从awk退出主shell脚本

Maj*_*imi 2 shell awk

我有一个bash脚本调用这样的jar文件:

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
Run Code Online (Sandbox Code Playgroud)

fileformat.awk是这样的:如果行开头#或不具有5个字段退出程序.

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

我想要的是exit 1awk脚本中终止整个shell脚本.但实际上并没有,因为错误的选项,jar文件会抛出异常.

Pau*_*ce. 6

因为你exit是在AWK程序报价,它的产卵子shell和退出.并且因为您正在打印错误消息stdout,它将while循环播放.将您的AWK脚本更改为此脚本应该可以正常工作:

{ 
    if (NF == 5 && $1 !~ /#.*/) {
        print $0 
    } else { 
        print "incorrect file format" > "/dev/stderr"
        exit 1
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @MajidAzimi:那是因为它在管道中.试试`echo"$ {PIPESTATUS [@]}"`.该数组中的元素0是管道的第一个成员的退出状态. (2认同)