1#!/bin/bash 2 3if [[ -z "$AWK" || -z "$WORKDIR" ]]; then 4 printf '$AWK and $WORKDIR must be set\n' >&2 5 exit 1 6fi 7 8TEMP0=$WORKDIR/test.temp.0 9TEMP1=$WORKDIR/test.temp.1 10TEMP2=$WORKDIR/test.temp.2 11 12RESULT=0 13 14fail() { 15 echo "$1" >&2 16 RESULT=1 17} 18 19echo T.close: test close built-in 20 21rm -f $TEMP0 22$AWK '{ print >>"'$TEMP0'"; close("'$TEMP0'") }' /etc/passwd 23diff /etc/passwd $TEMP0 || fail 'BAD: T.close (1)' 24 25ls -l > $TEMP0 26tail -1 $TEMP0 > $TEMP1 27$AWK '{ print >"'$TEMP2'"; close("'$TEMP2'") }' $TEMP0 28diff $TEMP1 $TEMP2 || fail 'BAD: T.close (2)' 29 30echo 0 > $TEMP1 31$AWK ' # non-accessible file 32 BEGIN { getline <"/etc/passwd"; print close("/etc/passwd"); } 33' > $TEMP2 34diff $TEMP1 $TEMP2 || fail 'BAD: T.close (3)' 35 36echo -1 > $TEMP1 37$AWK ' # file not opened 38 BEGIN { print close("glotch"); } 39' > $TEMP2 40diff $TEMP1 $TEMP2 || fail 'BAD: T.close (4)' 41 42echo 0 > $TEMP1 43$AWK ' # normal close 44 BEGIN { print "hello" > "'$TEMP0'"; print close("'$TEMP0'"); } 45' > $TEMP2 46diff $TEMP1 $TEMP2 || fail 'BAD: T.close (5)' 47 48echo 0 > $TEMP1 49$AWK ' # normal close 50 BEGIN { print "hello" | "cat > '$TEMP0'"; print close("cat > '$TEMP0'"); } 51' > $TEMP2 52diff $TEMP1 $TEMP2 || fail 'BAD: T.close (6)' 53 54exit $RESULT 55