正在从awk退出主shell脚本
我有一个bash脚本调用一个jar文件,如下所示:正在从awk退出主shell脚本,shell,awk,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"`" ec
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"
}
}
我想要的是
awk
脚本中的exit 1
终止整个shell脚本。但是实际上它没有,jar文件因为错误的选项而抛出异常。因为您的退出
在AWK程序中被引用,它正在生成一个子shell并从中退出。而且因为您正在将错误消息打印到stdout
,这将向while
循环提供信息。将AWK脚本更改为此,它应该可以工作:
{
if (NF == 5 && $1 !~ /#.*/) {
print $0
} else {
print "incorrect file format" > "/dev/stderr"
exit 1
}
}
谢谢,它解决了我的问题。但是在awk脚本退出脚本后,
echo${?}
显示0而不是1。@MajidAzimi:这是因为它在管道中。请尝试echo“${PIPESTATUS[@]}”
。该数组中的元素0是管道第一个成员的退出状态。