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スクリプト内でシェルスクリプト全体を終了させることです。しかし、実際にはそうではなく、間違ったオプションのためにjarファイルが例外をスローします。

4

1 に答える 1

6

yourexitは AWK プログラムで引用符で囲まれているため、サブシェルを生成し、そこから終了しています。また、エラー メッセージをに出力しているため、ループstdoutにフィードされます。whileAWK スクリプトを次のように変更すると、動作するはずです。

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