1*b30d1939SAndy Fiddaman######################################################################## 2*b30d1939SAndy Fiddaman# # 3*b30d1939SAndy Fiddaman# This software is part of the ast package # 4*b30d1939SAndy Fiddaman# Copyright (c) 1982-2012 AT&T Intellectual Property # 5*b30d1939SAndy Fiddaman# and is licensed under the # 6*b30d1939SAndy Fiddaman# Eclipse Public License, Version 1.0 # 7*b30d1939SAndy Fiddaman# by AT&T Intellectual Property # 8*b30d1939SAndy Fiddaman# # 9*b30d1939SAndy Fiddaman# A copy of the License is available at # 10*b30d1939SAndy Fiddaman# http://www.eclipse.org/org/documents/epl-v10.html # 11*b30d1939SAndy Fiddaman# (with md5 checksum b35adb5213ca9657e911e9befb180842) # 12*b30d1939SAndy Fiddaman# # 13*b30d1939SAndy Fiddaman# Information and Software Systems Research # 14*b30d1939SAndy Fiddaman# AT&T Research # 15*b30d1939SAndy Fiddaman# Florham Park NJ # 16*b30d1939SAndy Fiddaman# # 17*b30d1939SAndy Fiddaman# David Korn <dgk@research.att.com> # 18*b30d1939SAndy Fiddaman# # 19*b30d1939SAndy Fiddaman######################################################################## 20*b30d1939SAndy Fiddamanfunction err_exit 21*b30d1939SAndy Fiddaman{ 22*b30d1939SAndy Fiddaman print -u2 -n "\t" 23*b30d1939SAndy Fiddaman print -u2 -r ${Command}[$1]: "${@:2}" 24*b30d1939SAndy Fiddaman let Errors+=1 25*b30d1939SAndy Fiddaman} 26*b30d1939SAndy Fiddamanalias err_exit='err_exit $LINENO' 27*b30d1939SAndy Fiddaman 28*b30d1939SAndy FiddamanCommand=${0##*/} 29*b30d1939SAndy Fiddamaninteger Errors=0 30*b30d1939SAndy Fiddaman 31*b30d1939SAndy Fiddamantmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; } 32*b30d1939SAndy Fiddamantrap "cd /; rm -rf $tmp" EXIT 33*b30d1939SAndy Fiddaman 34*b30d1939SAndy Fiddamanf=$tmp/here1 35*b30d1939SAndy Fiddamang=$tmp/here2 36*b30d1939SAndy Fiddamancat > $f <<! 37*b30d1939SAndy Fiddamanhello world 38*b30d1939SAndy Fiddaman! 39*b30d1939SAndy Fiddamanif [[ $(<$f) != 'hello world' ]] 40*b30d1939SAndy Fiddamanthen err_exit "'hello world' here doc not working" 41*b30d1939SAndy Fiddamanfi 42*b30d1939SAndy Fiddamancat > $g <<\! 43*b30d1939SAndy Fiddamanhello world 44*b30d1939SAndy Fiddaman! 45*b30d1939SAndy Fiddamancmp $f $g 2> /dev/null || err_exit "'hello world' quoted here doc not working" 46*b30d1939SAndy Fiddamancat > $g <<- ! 47*b30d1939SAndy Fiddaman hello world 48*b30d1939SAndy Fiddaman! 49*b30d1939SAndy Fiddamancmp $f $g 2> /dev/null || err_exit "'hello world' tabbed here doc not working" 50*b30d1939SAndy Fiddamancat > $g <<- \! 51*b30d1939SAndy Fiddaman hello world 52*b30d1939SAndy Fiddaman! 53*b30d1939SAndy Fiddamancmp $f $g 2> /dev/null || err_exit "'hello world' quoted tabbed here doc not working" 54*b30d1939SAndy Fiddamanx=hello 55*b30d1939SAndy Fiddamancat > $g <<! 56*b30d1939SAndy Fiddaman$x world 57*b30d1939SAndy Fiddaman! 58*b30d1939SAndy Fiddamancmp $f $g 2> /dev/null || err_exit "'$x world' here doc not working" 59*b30d1939SAndy Fiddamancat > $g <<! 60*b30d1939SAndy Fiddaman$(print hello) world 61*b30d1939SAndy Fiddaman! 62*b30d1939SAndy Fiddamancmp $f $g 2> /dev/null || err_exit "'$(print hello) world' here doc not working" 63*b30d1939SAndy Fiddamancat > $f <<\!! 64*b30d1939SAndy Fiddaman!@#$%%^^&*()_+~"::~;'`<>?/.,{}[] 65*b30d1939SAndy Fiddaman!! 66*b30d1939SAndy Fiddamanif [[ $(<$f) != '!@#$%%^^&*()_+~"::~;'\''`<>?/.,{}[]' ]] 67*b30d1939SAndy Fiddamanthen err_exit "'hello world' here doc not working" 68*b30d1939SAndy Fiddamanfi 69*b30d1939SAndy Fiddamancat > $g <<!! 70*b30d1939SAndy Fiddaman!@#\$%%^^&*()_+~"::~;'\`<>?/.,{}[] 71*b30d1939SAndy Fiddaman!! 72*b30d1939SAndy Fiddamancmp $f $g 2> /dev/null || err_exit "unquoted here doc not working" 73*b30d1939SAndy Fiddamanexec 3<<! 74*b30d1939SAndy Fiddaman foo 75*b30d1939SAndy Fiddaman! 76*b30d1939SAndy Fiddamanif [[ $(<&3) != ' foo' ]] 77*b30d1939SAndy Fiddamanthen err_exit "leading tabs stripped with <<!" 78*b30d1939SAndy Fiddamanfi 79*b30d1939SAndy Fiddaman$SHELL -c " 80*b30d1939SAndy Fiddamaneval `echo 'cat <<x'` "|| err_exit "eval `echo 'cat <<x'` core dumps" 81*b30d1939SAndy Fiddamancat > /dev/null <<EOF # comments should not cause core dumps 82*b30d1939SAndy Fiddamanabc 83*b30d1939SAndy FiddamanEOF 84*b30d1939SAndy Fiddamancat >$g << : 85*b30d1939SAndy Fiddaman: 86*b30d1939SAndy Fiddaman: 87*b30d1939SAndy Fiddamancmp /dev/null $g 2> /dev/null || err_exit "empty here doc not working" 88*b30d1939SAndy Fiddamanx=$(print $( cat <<HUP 89*b30d1939SAndy Fiddamanhello 90*b30d1939SAndy FiddamanHUP 91*b30d1939SAndy Fiddaman) 92*b30d1939SAndy Fiddaman) 93*b30d1939SAndy Fiddamanif [[ $x != hello ]] 94*b30d1939SAndy Fiddamanthen err_exit "here doc inside command sub not working" 95*b30d1939SAndy Fiddamanfi 96*b30d1939SAndy Fiddamany=$(cat <<! 97*b30d1939SAndy Fiddaman${x:+${x}} 98*b30d1939SAndy Fiddaman! 99*b30d1939SAndy Fiddaman) 100*b30d1939SAndy Fiddamanif [[ $y != "${x:+${x}}" ]] 101*b30d1939SAndy Fiddamanthen err_exit '${x:+${x}} not working in here document' 102*b30d1939SAndy Fiddamanfi 103*b30d1939SAndy Fiddaman$SHELL -c ' 104*b30d1939SAndy Fiddamanx=0 105*b30d1939SAndy Fiddamanwhile (( x < 100 )) 106*b30d1939SAndy Fiddamando ((x = x+1)) 107*b30d1939SAndy Fiddaman cat << EOF 108*b30d1939SAndy FiddamanEOF 109*b30d1939SAndy Fiddamandone 110*b30d1939SAndy Fiddaman' 2> /dev/null || err_exit '100 empty here docs fails' 111*b30d1939SAndy Fiddaman{ 112*b30d1939SAndy Fiddaman print 'builtin -d cat 113*b30d1939SAndy Fiddaman cat <<- EOF' 114*b30d1939SAndy Fiddaman for ((i=0; i < 100; i++)) 115*b30d1939SAndy Fiddaman do print XXXXXXXXXXXXXXXXXXXX 116*b30d1939SAndy Fiddaman done 117*b30d1939SAndy Fiddaman print ' XXX$(date)XXXX 118*b30d1939SAndy Fiddaman EOF' 119*b30d1939SAndy Fiddaman} > $f 120*b30d1939SAndy Fiddamanchmod +x "$f" 121*b30d1939SAndy Fiddaman$SHELL "$f" > /dev/null || err_exit "large here-doc with command substitution fails" 122*b30d1939SAndy Fiddamanx=$(/bin/cat <<! 123*b30d1939SAndy Fiddaman$0 124*b30d1939SAndy Fiddaman! 125*b30d1939SAndy Fiddaman) 126*b30d1939SAndy Fiddaman[[ "$x" == "$0" ]] || err_exit '$0 not correct inside here documents' 127*b30d1939SAndy Fiddaman$SHELL -c 'x=$( 128*b30d1939SAndy Fiddamancat << EOF 129*b30d1939SAndy FiddamanEOF)' 2> /dev/null || err_exit 'here-doc cannot be terminated by )' 130*b30d1939SAndy Fiddamanif [[ $( IFS=:;cat <<-! 131*b30d1939SAndy Fiddaman $IFS$(print hi)$IFS 132*b30d1939SAndy Fiddaman !) != :hi: ]] 133*b30d1939SAndy Fiddamanthen err_exit '$IFS unset by command substitution in here docs' 134*b30d1939SAndy Fiddamanfi 135*b30d1939SAndy Fiddamanif x=$($SHELL -c 'cat <<< "hello world"' 2> /dev/null) 136*b30d1939SAndy Fiddamanthen [[ $x == 'hello world' ]] || err_exit '<<< documents not working' 137*b30d1939SAndy Fiddaman x=$($SHELL -c 'v="hello world";cat <<< $v' 2> /dev/null) 138*b30d1939SAndy Fiddaman [[ $x == 'hello world' ]] || err_exit '<<< documents with $x not working' 139*b30d1939SAndy Fiddaman x=$($SHELL -c 'v="hello world";cat <<< "$v"' 2> /dev/null) 140*b30d1939SAndy Fiddaman [[ $x == 'hello world' ]] || err_exit '<<< documents with $x not working' 141*b30d1939SAndy Fiddamanelse err_exit '<<< syntax not supported' 142*b30d1939SAndy Fiddamanfi 143*b30d1939SAndy Fiddamanif [[ $(cat << EOF #testing 144*b30d1939SAndy Fiddaman#abc 145*b30d1939SAndy Fiddamanabc 146*b30d1939SAndy FiddamanEOF) != $'#abc\nabc' ]] 147*b30d1939SAndy Fiddamanthen err_exit 'comments not preserved in here-documents' 148*b30d1939SAndy Fiddamanfi 149*b30d1939SAndy Fiddamancat > "$f" <<- '!!!!' 150*b30d1939SAndy Fiddaman builtin cat 151*b30d1939SAndy Fiddaman : << EOF 152*b30d1939SAndy Fiddaman $PWD 153*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 154*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 155*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 156*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 157*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 158*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 159*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 160*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 161*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 162*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 163*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 164*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 165*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 166*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 167*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 168*b30d1939SAndy Fiddaman EOF 169*b30d1939SAndy Fiddaman command exec 3>&- 4>&- 5>&- 6>&- 7>&- 8>&- 9>&- 170*b30d1939SAndy Fiddaman x=abc 171*b30d1939SAndy Fiddaman cat << EOF 172*b30d1939SAndy Fiddaman $x 173*b30d1939SAndy Fiddaman EOF 174*b30d1939SAndy Fiddaman!!!! 175*b30d1939SAndy Fiddamanchmod 755 "$f" 176*b30d1939SAndy Fiddamanif [[ $($SHELL "$f") != abc ]] 177*b30d1939SAndy Fiddamanthen err_exit 'here document descritor was closed' 178*b30d1939SAndy Fiddamanfi 179*b30d1939SAndy Fiddamancat > "$f" <<- '!!!!' 180*b30d1939SAndy Fiddaman exec 0<&- 181*b30d1939SAndy Fiddaman foobar() 182*b30d1939SAndy Fiddaman { 183*b30d1939SAndy Fiddaman /bin/cat <<- ! 184*b30d1939SAndy Fiddaman foobar 185*b30d1939SAndy Fiddaman ! 186*b30d1939SAndy Fiddaman } 187*b30d1939SAndy Fiddaman : << EOF 188*b30d1939SAndy Fiddaman $PWD 189*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 190*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 191*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 193*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 194*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 195*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 196*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 197*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 198*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 199*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 200*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 201*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 202*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 203*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 204*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 205*b30d1939SAndy Fiddaman xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 206*b30d1939SAndy Fiddaman EOF 207*b30d1939SAndy Fiddaman print -r -- "$(foobar)" 208*b30d1939SAndy Fiddaman!!!! 209*b30d1939SAndy Fiddamanif [[ $($SHELL "$f") != foobar ]] 210*b30d1939SAndy Fiddamanthen err_exit 'here document with stdin closed failed' 211*b30d1939SAndy Fiddamanfi 212*b30d1939SAndy Fiddamanprintf $'cat <<# \\!!!\n\thello\n\t\tworld\n!!!' > $f 213*b30d1939SAndy Fiddaman[[ $($SHELL "$f") == $'hello\n\tworld' ]] || err_exit "<<# not working for quoted here documents" 214*b30d1939SAndy Fiddamanprintf $'w=world;cat <<# !!!\n\thello\n\t\t$w\n!!!' > $f 215*b30d1939SAndy Fiddaman[[ $($SHELL "$f") == $'hello\n\tworld' ]] || err_exit "<<# not working for non-quoted here documents" 216*b30d1939SAndy Fiddaman[[ $( $SHELL <<- \++++ 217*b30d1939SAndy Fiddaman S=( typeset a ) 218*b30d1939SAndy Fiddaman function S.a.get 219*b30d1939SAndy Fiddaman { 220*b30d1939SAndy Fiddaman .sh.value=$__a 221*b30d1939SAndy Fiddaman } 222*b30d1939SAndy Fiddaman __a=1234 223*b30d1939SAndy Fiddaman cat <<-EOF 224*b30d1939SAndy Fiddaman ${S.a} 225*b30d1939SAndy Fiddaman EOF 226*b30d1939SAndy Fiddaman++++ 227*b30d1939SAndy Fiddaman) == 1234 ]] 2> /dev/null || err_exit 'here document with get discipline failed' 228*b30d1939SAndy Fiddaman[[ $($SHELL -c 'g(){ print ok;}; cat <<- EOF 229*b30d1939SAndy Fiddaman ${ g;} 230*b30d1939SAndy Fiddaman EOF 231*b30d1939SAndy Fiddaman ' 2> /dev/null) == ok ]] || err_exit '${ command;} not working in heredoc' 232*b30d1939SAndy Fiddamanscript=$f 233*b30d1939SAndy Fiddaman{ 234*b30d1939SAndy Fiddamanfor ((i=0; i < 406; i++)) 235*b30d1939SAndy Fiddamando print ': 23456789012345678' 236*b30d1939SAndy Fiddamandone 237*b30d1939SAndy Fiddamanprint : 123456789123 238*b30d1939SAndy Fiddamancat <<- \EOF 239*b30d1939SAndy Fiddamaneval "$( 240*b30d1939SAndy Fiddaman { cat ; } <<MARKER 241*b30d1939SAndy Fiddaman print hello 242*b30d1939SAndy Fiddaman MARKER 243*b30d1939SAndy Fiddaman)" 244*b30d1939SAndy FiddamanEOF 245*b30d1939SAndy Fiddaman} > $script 246*b30d1939SAndy Fiddamanchmod +x $script 247*b30d1939SAndy Fiddaman[[ $($SHELL $script) == hello ]] 2> /dev/null || err_exit 'heredoc embeded in command substitution fails at buffer boundary' 248*b30d1939SAndy Fiddaman 249*b30d1939SAndy Fiddamangot=$( cat << EOF 250*b30d1939SAndy Fiddaman\ 251*b30d1939SAndy Fiddamanabc 252*b30d1939SAndy FiddamanEOF) 253*b30d1939SAndy Fiddaman[[ $got == abc ]] || err_exit 'line continuation at start of buffer not working' 254*b30d1939SAndy Fiddaman 255*b30d1939SAndy Fiddamantmpfile1=$tmp/file1 256*b30d1939SAndy Fiddamantmpfile2=$tmp/file2 257*b30d1939SAndy Fiddamanfunction gendata 258*b30d1939SAndy Fiddaman{ 259*b30d1939SAndy Fiddaman typeset -RZ3 i 260*b30d1939SAndy Fiddaman for ((i=0; i < 500; i++)) 261*b30d1939SAndy Fiddaman do print -r -- "=====================This is line $i=============" 262*b30d1939SAndy Fiddaman done 263*b30d1939SAndy Fiddaman} 264*b30d1939SAndy Fiddaman 265*b30d1939SAndy Fiddamancat > $tmpfile1 <<- +++ 266*b30d1939SAndy Fiddaman function foobar 267*b30d1939SAndy Fiddaman { 268*b30d1939SAndy Fiddaman cat << XXX 269*b30d1939SAndy Fiddaman $(gendata) 270*b30d1939SAndy Fiddaman XXX 271*b30d1939SAndy Fiddaman } 272*b30d1939SAndy Fiddaman cat > $tmpfile2 <<- EOF 273*b30d1939SAndy Fiddaman \$(foobar) 274*b30d1939SAndy Fiddaman $(gendata) 275*b30d1939SAndy FiddamanEOF 276*b30d1939SAndy Fiddaman+++ 277*b30d1939SAndy Fiddamanchmod +x $tmpfile1 278*b30d1939SAndy Fiddaman$SHELL $tmpfile1 279*b30d1939SAndy Fiddamanset -- $(wc < $tmpfile2) 280*b30d1939SAndy Fiddaman(( $1 == 1000 )) || err_exit "heredoc $1 lines, should be 1000 lines" 281*b30d1939SAndy Fiddaman(( $2 == 4000 )) || err_exit "heredoc $2 words, should be 4000 words" 282*b30d1939SAndy Fiddaman 283*b30d1939SAndy Fiddaman# comment with here document looses line number count 284*b30d1939SAndy Fiddamaninteger line=$((LINENO+5)) 285*b30d1939SAndy Fiddamanfunction tst 286*b30d1939SAndy Fiddaman{ 287*b30d1939SAndy Fiddaman [[ $1 == $2 ]] || echo expected $1, got $2 288*b30d1939SAndy Fiddaman} 289*b30d1939SAndy Fiddamantst $line $LINENO <<"!" # this comment affects LINENO # 290*b30d1939SAndy Fiddaman1 291*b30d1939SAndy Fiddaman! 292*b30d1939SAndy Fiddaman(( (line+=3) == LINENO )) || err_exit "line number=$LINENO should be $line" 293*b30d1939SAndy Fiddaman 294*b30d1939SAndy Fiddaman[[ $($SHELL -c 'wc -c <<< ""' 2> /dev/null) == *1 ]] || err_exit '<<< with empty string not working' 295*b30d1939SAndy Fiddaman 296*b30d1939SAndy Fiddamanmkdir $tmp/functions 297*b30d1939SAndy Fiddamancat > $tmp/functions/t2 <<\!!! 298*b30d1939SAndy Fiddamanfunction t2 299*b30d1939SAndy Fiddaman{ 300*b30d1939SAndy Fiddamancat <<EOF | sed 's/1234567890/qwertyuiopasdfghj/' 301*b30d1939SAndy Fiddaman${1} 302*b30d1939SAndy FiddamanEOF 303*b30d1939SAndy Fiddaman} 304*b30d1939SAndy Fiddaman!!! 305*b30d1939SAndy Fiddaman 306*b30d1939SAndy FiddamanFPATH=$tmp/functions 307*b30d1939SAndy Fiddamanfoo=${ 308*b30d1939SAndy Fiddamancat <<EOF 309*b30d1939SAndy Fiddaman1 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123 310*b30d1939SAndy Fiddaman111111111111111111111111111111111111111111111111111111111111111 311*b30d1939SAndy Fiddaman111111111111111111111111111111111111111111111111111111111111111 312*b30d1939SAndy Fiddaman111111111111111111111111111111111111111111111111111111111111111 313*b30d1939SAndy Fiddaman111111111111111111111111111111111111111111111111111111111111111 314*b30d1939SAndy Fiddaman111111111111111111111111111111111111111111111111111111111111111 315*b30d1939SAndy Fiddaman111111111111111111111111111111111111111111111111111111111111111 316*b30d1939SAndy Fiddaman111111111111111111111111111111111111111111111111111111111111111 317*b30d1939SAndy Fiddaman111111111111111111111111111111111111111111111111111111111111111 318*b30d1939SAndy Fiddaman111111111111111111111111111111111111111111111111111111111111111 319*b30d1939SAndy Fiddaman111111111111111111111111111111111111111111111111111111111111111 320*b30d1939SAndy Fiddaman111111111111111111111111111111111111111111111111111111111111111 321*b30d1939SAndy Fiddaman111111111111111111111111111111111111111111111111111111111111111 322*b30d1939SAndy Fiddaman111111111111111111111111111111111111111111111111111111111111111 323*b30d1939SAndy Fiddaman111111111111111111111111111111111111111111111111111111111111111 324*b30d1939SAndy Fiddaman111111111111111111111111111111111111111111111111111111111111 1 325*b30d1939SAndy Fiddaman 326*b30d1939SAndy Fiddaman2 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123 327*b30d1939SAndy Fiddaman222222222222222222222222222222222222222222222222222222222222222 328*b30d1939SAndy Fiddaman222222222222222222222222222222222222222222222222222222222222222 329*b30d1939SAndy Fiddaman222222222222222222222222222222222222222222222222222222222222222 330*b30d1939SAndy Fiddaman222222222222222222222222222222222222222222222222222222222222222 331*b30d1939SAndy Fiddaman222222222222222222222222222222222222222222222222222222222222222 332*b30d1939SAndy Fiddaman222222222222222222222222222222222222222222222222222222222222222 333*b30d1939SAndy Fiddaman222222222222222222222222222222222222222222222222222222222222222 334*b30d1939SAndy Fiddaman222222222222222222222222222222222222222222222222222222222222222 335*b30d1939SAndy Fiddaman222222222222222222222222222222222222222222222222222222222222222 336*b30d1939SAndy Fiddaman222222222222222222222222222222222222222222222222222222222222222 337*b30d1939SAndy Fiddaman222222222222222222222222222222222222222222222222222222222222222 338*b30d1939SAndy Fiddaman222222222222222222222222222222222222222222222222222222222222222 339*b30d1939SAndy Fiddaman222222222222222222222222222222222222222222222222222222222222222 340*b30d1939SAndy Fiddaman222222222222222222222222222222222222222222222222222222222222222 341*b30d1939SAndy Fiddaman222222222222222222222222222222222222222222222222222222222222 2 342*b30d1939SAndy Fiddaman 343*b30d1939SAndy Fiddaman3 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123 344*b30d1939SAndy Fiddaman333333333333333333333333333333333333333333333333333333333333333 345*b30d1939SAndy Fiddaman333333333333333333333333333333333333333333333333333333333333333 346*b30d1939SAndy Fiddaman333333333333333333333333333333333333333333333333333333333333333 347*b30d1939SAndy Fiddaman333333333333333333333333333333333333333333333333333333333333333 348*b30d1939SAndy Fiddaman333333333333333333333333333333333333333333333333333333333333333 349*b30d1939SAndy Fiddaman333333333333333333333333333333333333333333333333333333333333333 350*b30d1939SAndy Fiddaman333333333333333333333333333333333333333333333333333333333333333 351*b30d1939SAndy Fiddaman333333333333333333333333333333333333333333333333333333333333333 352*b30d1939SAndy Fiddaman333333333333333333333333333333333333333333333333333333333333333 353*b30d1939SAndy Fiddaman333333333333333333333333333333333333333333333333333333333333333 354*b30d1939SAndy Fiddaman333333333333333333333333333333333333333333333333333333333333333 355*b30d1939SAndy Fiddaman333333333333333333333333333333333333333333333333333333333333333 356*b30d1939SAndy Fiddaman333333333333333333333333333333333333333333333333333333333333333 357*b30d1939SAndy Fiddaman333333333333333333333333333333333333333333333333333333333333333 358*b30d1939SAndy Fiddaman333333333333333333333333333333333333333333333333333333333333 3 359*b30d1939SAndy Fiddaman 360*b30d1939SAndy Fiddaman4 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123 361*b30d1939SAndy Fiddaman444444444444444444444444444444444444444444444444444444444444444 362*b30d1939SAndy Fiddaman444444444444444444444444444444444444444444444444444444444444444 363*b30d1939SAndy Fiddaman444444444444444444444444444444444444444444444444444444444444444 364*b30d1939SAndy Fiddaman444444444444444444444444444444444444444444444444444444444444444 365*b30d1939SAndy Fiddaman444444444444444444444444444444444444444444444444444444444444444 366*b30d1939SAndy Fiddaman444444444444444444444444444444444444444444444444444444444444444 367*b30d1939SAndy Fiddaman444444444444444444444444444444444444444444444444444444444444444 368*b30d1939SAndy Fiddaman444444444444444444444444444444444444444444444444444444444444444 369*b30d1939SAndy Fiddaman444444444444444444444444444444444444444444444444444444444444444 370*b30d1939SAndy Fiddaman444444444444444444444444444444444444444444444444444444444444444 371*b30d1939SAndy Fiddaman444444444444444444444444444444444444444444444444444444444444444 372*b30d1939SAndy Fiddaman444444444444444444444444444444444444444444444444444444444444444 373*b30d1939SAndy Fiddaman444444444444444444444444444444444444444444444444444444444444444 374*b30d1939SAndy Fiddaman444444444444444444444444444444444444444444444444444444444444444 375*b30d1939SAndy Fiddaman444444444444444444444444444444444444444444444444444444444444 4 376*b30d1939SAndy Fiddaman 377*b30d1939SAndy Fiddaman5 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123 378*b30d1939SAndy Fiddaman555555555555555555555555555555555555555555555555555555555555555 379*b30d1939SAndy Fiddaman555555555555555555555555555555555555555555555555555555555555555 380*b30d1939SAndy Fiddaman555555555555555555555555555555555555555555555555555555555555555 381*b30d1939SAndy Fiddaman555555555555555555555555555555555555555555555555555555555555555 382*b30d1939SAndy Fiddaman555555555555555555555555555555555555555555555555555555555555555 383*b30d1939SAndy Fiddaman555555555555555555555555555555555555555555555555555555555555555 384*b30d1939SAndy Fiddaman555555555555555555555555555555555555555555555555555555555555555 385*b30d1939SAndy Fiddaman555555555555555555555555555555555555555555555555555555555555555 386*b30d1939SAndy Fiddaman555555555555555555555555555555555555555555555555555555555555555 387*b30d1939SAndy Fiddaman555555555555555555555555555555555555555555555555555555555555555 388*b30d1939SAndy Fiddaman555555555555555555555555555555555555555555555555555555555555555 389*b30d1939SAndy Fiddaman555555555555555555555555555555555555555555555555555555555555555 390*b30d1939SAndy Fiddaman555555555555555555555555555555555555555555555555555555555555555 391*b30d1939SAndy Fiddaman555555555555555555555555555555555555555555555555555555555555555 392*b30d1939SAndy Fiddaman555555555555555555555555555555555555555555555555555555555555 5 393*b30d1939SAndy Fiddaman 394*b30d1939SAndy Fiddaman6 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123 395*b30d1939SAndy Fiddaman666666666666666666666666666666666666666666666666666666666666666 396*b30d1939SAndy Fiddaman666666666666666666666666666666666666666666666666666666666666666 397*b30d1939SAndy Fiddaman666666666666666666666666666666666666666666666666666666666666666 398*b30d1939SAndy Fiddaman666666666666666666666666666666666666666666666666666666666666666 399*b30d1939SAndy Fiddaman666666666666666666666666666666666666666666666666666666666666666 400*b30d1939SAndy Fiddaman666666666666666666666666666666666666666666666666666666666666666 401*b30d1939SAndy Fiddaman666666666666666666666666666666666666666666666666666666666666666 402*b30d1939SAndy Fiddaman666666666666666666666666666666666666666666666666666666666666666 403*b30d1939SAndy Fiddaman666666666666666666666666666666666666666666666666666666666666666 404*b30d1939SAndy Fiddaman666666666666666666666666666666666666666666666666666666666666666 405*b30d1939SAndy Fiddaman666666666666666666666666666666666666666666666666666666666666666 406*b30d1939SAndy Fiddaman666666666666666666666666666666666666666666666666666666666666666 407*b30d1939SAndy Fiddaman666666666666666666666666666666666666666666666666666666666666666 408*b30d1939SAndy Fiddaman666666666666666666666666666666666666666666666666666666666666666 409*b30d1939SAndy Fiddaman666666666666666666666666666666666666666666666666666666666666 6 410*b30d1939SAndy Fiddaman 411*b30d1939SAndy Fiddaman7 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123 412*b30d1939SAndy Fiddaman777777777777777777777777777777777777777777777777777777777777777 413*b30d1939SAndy Fiddaman777777777777777777777777777777777777777777777777777777777777777 414*b30d1939SAndy Fiddaman777777777777777777777777777777777777777777777777777777777777777 415*b30d1939SAndy Fiddaman777777777777777777777777777777777777777777777777777777777777777 416*b30d1939SAndy Fiddaman777777777777777777777777777777777777777777777777777777777777777 417*b30d1939SAndy Fiddaman777777777777777777777777777777777777777777777777777777777777777 418*b30d1939SAndy Fiddaman777777777777777777777777777777777777777777777777777777777777777 419*b30d1939SAndy Fiddaman777777777777777777777777777777777777777777777777777777777777777 420*b30d1939SAndy Fiddaman777777777777777777777777777777777777777777777777777777777777777 421*b30d1939SAndy Fiddaman777777777777777777777777777777777777777777777777777777777777777 422*b30d1939SAndy Fiddaman777777777777777777777777777777777777777777777777777777777777777 423*b30d1939SAndy Fiddaman777777777777777777777777777777777777777777777777777777777777777 424*b30d1939SAndy Fiddaman777777777777777777777777777777777777777777777777777777777777777 425*b30d1939SAndy Fiddaman777777777777777777777777777777777777777777777777777777777777777 426*b30d1939SAndy Fiddaman777777777777777777777777777777777777777777777777777777777777 7 427*b30d1939SAndy Fiddaman 428*b30d1939SAndy Fiddaman8 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123 429*b30d1939SAndy Fiddaman888888888888888888888888888888888888888888888888888888888888888 430*b30d1939SAndy Fiddaman888888888888888888888888888888888888888888888888888888888888888 431*b30d1939SAndy Fiddaman888888888888888888888888888888888888888888888888888888888888888 432*b30d1939SAndy Fiddaman888888888888888888888888888888888888888888888888888888888888888 433*b30d1939SAndy Fiddaman888888888888888888888888888888888888888888888888888888888888888 434*b30d1939SAndy Fiddaman888888888888888888888888888888888888888888888888888888888888888 435*b30d1939SAndy Fiddaman888888888888888888888888888888888888888888888888888888888888888 436*b30d1939SAndy Fiddaman888888888888888888888888888888888888888888888888888888888888888 437*b30d1939SAndy Fiddaman888888888888888888888888888888888888888888888888888888888888888 438*b30d1939SAndy Fiddaman888888888888888888888888888888888888888888888888888888888888888 439*b30d1939SAndy Fiddaman888888888888888888888888888888888888888888888888888888888888888 440*b30d1939SAndy Fiddaman888888888888888888888888888888888888888888888888888888888888888 441*b30d1939SAndy Fiddaman888888888888888888888888888888888888888888888888888888888888888 442*b30d1939SAndy Fiddaman888888888888888888888888888888888888888888888888888888888888888 443*b30d1939SAndy Fiddaman888888888888888888888888888888888888888888888888888888888888 8 444*b30d1939SAndy Fiddaman 445*b30d1939SAndy Fiddaman9 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123 446*b30d1939SAndy Fiddaman999999999999999999999999999999999999999999999999999999999999999 447*b30d1939SAndy Fiddaman999999999999999999999999999999999999999999999999999999999999999 448*b30d1939SAndy Fiddaman999999999999999999999999999999999999999999999999999999999999999 449*b30d1939SAndy Fiddaman999999999999999999999999999999999999999999999999999999999999999 450*b30d1939SAndy Fiddaman999999999999999999999999999999999999999999999999999999999999999 451*b30d1939SAndy Fiddaman999999999999999999999999999999999999999999999999999999999999999 452*b30d1939SAndy Fiddaman999999999999999999999999999999999999999999999999999999999999999 453*b30d1939SAndy Fiddaman999999999999999999999999999999999999999999999999999999999999999 454*b30d1939SAndy Fiddaman999999999999999999999999999999999999999999999999999999999999999 455*b30d1939SAndy Fiddaman999999999999999999999999999999999999999999999999999999999999999 456*b30d1939SAndy Fiddaman999999999999999999999999999999999999999999999999999999999999999 457*b30d1939SAndy Fiddaman999999999999999999999999999999999999999999999999999999999999999 458*b30d1939SAndy Fiddaman999999999999999999999999999999999999999999999999999999999999999 459*b30d1939SAndy Fiddaman999999999999999999999999999999999999999999999999999999999999999 460*b30d1939SAndy Fiddaman999999999999999999999999999999999999999999999999999999999999 9 461*b30d1939SAndy Fiddaman 462*b30d1939SAndy Fiddaman10 4567890 $(t2 1234567890 ) 0123456789012345678901234567890123 463*b30d1939SAndy Fiddaman101010101010101010101010101010101010101010101010101010101010103 464*b30d1939SAndy Fiddaman101010101010101010101010101010101010101010101010101010101010103 465*b30d1939SAndy Fiddaman101010101010101010101010101010101010101010101010101010101010103 466*b30d1939SAndy Fiddaman101010101010101010101010101010101010101010101010101010101010103 467*b30d1939SAndy Fiddaman101010101010101010101010101010101010101010101010101010101010103 468*b30d1939SAndy Fiddaman101010101010101010101010101010101010101010101010101010101010103 469*b30d1939SAndy Fiddaman101010101010101010101010101010101010101010101010101010101010103 470*b30d1939SAndy Fiddaman101010101010101010101010101010101010101010101010101010101010103 471*b30d1939SAndy Fiddaman101010101010101010101010101010101010101010101010101010101010103 472*b30d1939SAndy Fiddaman101010101010101010101010101010101010101010101010101010101010103 473*b30d1939SAndy Fiddaman101010101010101010101010101010101010101010101010101010101010103 474*b30d1939SAndy Fiddaman101010101010101010101010101010101010101010101010101010101010103 475*b30d1939SAndy Fiddaman101010101010101010101010101010101010101010101010101010101010103 476*b30d1939SAndy Fiddaman101010101010101010101010101010101010101010101010101010101010103 477*b30d1939SAndy Fiddaman1010101010101010101010101010101010101010101010101010101010 END 478*b30d1939SAndy Fiddaman 479*b30d1939SAndy FiddamanEOF 480*b30d1939SAndy Fiddaman} 481*b30d1939SAndy Fiddaman[[ ${#foo} == 10238 ]] || err_exit 'large here docs containing command subs of dynamically loaded functions fails' 482*b30d1939SAndy Fiddaman 483*b30d1939SAndy Fiddaman{ 484*b30d1939SAndy Fiddaman print $'FOO=1\nBAR=foobarbaz' 485*b30d1939SAndy Fiddaman print -- 'cat <<#EOF' 486*b30d1939SAndy Fiddaman integer i 487*b30d1939SAndy Fiddaman for ((i=0; i < 50000; i++)) 488*b30d1939SAndy Fiddaman do print -r -- ' $(($FOO + 1))' 489*b30d1939SAndy Fiddaman print -r -- ' $BAR meep' 490*b30d1939SAndy Fiddaman done 491*b30d1939SAndy Fiddaman print EOF 492*b30d1939SAndy Fiddaman} > $f 493*b30d1939SAndy Fiddaman$SHELL $f > $g 494*b30d1939SAndy Fiddaman[[ $(grep meep $g | grep -v foobar) != '' ]] && err_exit 'here-doc loosing $var expansions on boundaries in rare cases' 495*b30d1939SAndy Fiddaman 496*b30d1939SAndy Fiddamanprint foo > $tmp/foofile 497*b30d1939SAndy Fiddamanx=$( $SHELL 2> /dev/null 'read <<< $(<'"$tmp"'/foofile) 2> /dev/null;print -r "$REPLY"') 498*b30d1939SAndy Fiddaman[[ $x == foo ]] || err_exit '<<< $(<file) not working' 499*b30d1939SAndy Fiddaman 500*b30d1939SAndy Fiddamanexit $((Errors<125?Errors:125)) 501