我有一个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
fileformat.awk
如下所示:如果该行以#
开头,或者没有5个字段退出该程序。
{
if (NF == 5 && $1 !~ /#.*/) {
print $0
} else {
print "incorrect file format"
"exit 1"
}
}
我想要的是exit 1
脚本中的awk
终止整个shell脚本。但实际上并没有,因为错误的选项,jar文件会引发异常。
答案 0 :(得分:6)
因为你的exit
在AWK程序中引用,它会产生一个子shell并退出 。并且因为您正在将错误消息打印到stdout
,它会提供while
循环。将您的AWK脚本更改为此脚本应该可以正常工作:
{
if (NF == 5 && $1 !~ /#.*/) {
print $0
} else {
print "incorrect file format" > "/dev/stderr"
exit 1
}
}