Blame src/cmd/ksh93/tests/heredoc.sh

Packit Service a8c26c
########################################################################
Packit Service a8c26c
#                                                                      #
Packit Service a8c26c
#               This software is part of the ast package               #
Packit Service a8c26c
#          Copyright (c) 1982-2012 AT&T Intellectual Property          #
Packit Service a8c26c
#                      and is licensed under the                       #
Packit Service a8c26c
#                 Eclipse Public License, Version 1.0                  #
Packit Service a8c26c
#                    by AT&T Intellectual Property                     #
Packit Service a8c26c
#                                                                      #
Packit Service a8c26c
#                A copy of the License is available at                 #
Packit Service a8c26c
#          http://www.eclipse.org/org/documents/epl-v10.html           #
Packit Service a8c26c
#         (with md5 checksum b35adb5213ca9657e911e9befb180842)         #
Packit Service a8c26c
#                                                                      #
Packit Service a8c26c
#              Information and Software Systems Research               #
Packit Service a8c26c
#                            AT&T Research                             #
Packit Service a8c26c
#                           Florham Park NJ                            #
Packit Service a8c26c
#                                                                      #
Packit Service a8c26c
#                  David Korn <dgk@research.att.com>                   #
Packit Service a8c26c
#                                                                      #
Packit Service a8c26c
########################################################################
Packit Service a8c26c
function err_exit
Packit Service a8c26c
{
Packit Service a8c26c
	print -u2 -n "\t"
Packit Service a8c26c
	print -u2 -r ${Command}[$1]: "${@:2}"
Packit Service a8c26c
	let Errors+=1
Packit Service a8c26c
}
Packit Service a8c26c
alias err_exit='err_exit $LINENO'
Packit Service a8c26c
Packit Service a8c26c
Command=${0##*/}
Packit Service a8c26c
integer Errors=0
Packit Service a8c26c
Packit Service a8c26c
tmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; }
Packit Service a8c26c
trap "cd /; rm -rf $tmp" EXIT
Packit Service a8c26c
Packit Service a8c26c
f=$tmp/here1
Packit Service a8c26c
g=$tmp/here2
Packit Service a8c26c
cat > $f <
Packit Service a8c26c
hello world
Packit Service a8c26c
!
Packit Service a8c26c
if	[[ $(<$f) != 'hello world' ]]
Packit Service a8c26c
then	err_exit "'hello world' here doc not working"
Packit Service a8c26c
fi
Packit Service a8c26c
cat > $g <<\!
Packit Service a8c26c
hello world
Packit Service a8c26c
!
Packit Service a8c26c
cmp $f $g 2> /dev/null || err_exit "'hello world' quoted here doc not working"
Packit Service a8c26c
cat > $g <<- !
Packit Service a8c26c
	hello world
Packit Service a8c26c
!
Packit Service a8c26c
cmp $f $g 2> /dev/null || err_exit "'hello world' tabbed here doc not working"
Packit Service a8c26c
cat > $g <<- \!
Packit Service a8c26c
	hello world
Packit Service a8c26c
!
Packit Service a8c26c
cmp $f $g 2> /dev/null || err_exit "'hello world' quoted tabbed here doc not working"
Packit Service a8c26c
x=hello
Packit Service a8c26c
cat > $g <
Packit Service a8c26c
$x world
Packit Service a8c26c
!
Packit Service a8c26c
cmp $f $g 2> /dev/null || err_exit "'$x world' here doc not working"
Packit Service a8c26c
cat > $g <
Packit Service a8c26c
$(print hello) world
Packit Service a8c26c
!
Packit Service a8c26c
cmp $f $g 2> /dev/null || err_exit "'$(print hello) world' here doc not working"
Packit Service a8c26c
cat > $f <<\!!
Packit Service a8c26c
!@#$%%^^&*()_+~"::~;'`<>?/.,{}[]
Packit Service a8c26c
!!
Packit Service a8c26c
if	[[ $(<$f) != '!@#$%%^^&*()_+~"::~;'\''`<>?/.,{}[]' ]]
Packit Service a8c26c
then	err_exit "'hello world' here doc not working"
Packit Service a8c26c
fi
Packit Service a8c26c
cat > $g <
Packit Service a8c26c
!@#\$%%^^&*()_+~"::~;'\`<>?/.,{}[]
Packit Service a8c26c
!!
Packit Service a8c26c
cmp $f $g 2> /dev/null || err_exit "unquoted here doc not working"
Packit Service a8c26c
exec 3<
Packit Service a8c26c
	foo
Packit Service a8c26c
!
Packit Service a8c26c
if	[[ $(<&3) != '	foo' ]]
Packit Service a8c26c
then	err_exit "leading tabs stripped with <
Packit Service a8c26c
fi
Packit Service a8c26c
$SHELL -c "
Packit Service a8c26c
eval `echo 'cat <
Packit Service a8c26c
cat > /dev/null <
Packit Service a8c26c
abc
Packit Service a8c26c
EOF
Packit Service a8c26c
cat >$g << :
Packit Service a8c26c
:
Packit Service a8c26c
:
Packit Service a8c26c
cmp /dev/null $g 2> /dev/null || err_exit "empty here doc not working"
Packit Service a8c26c
x=$(print $( cat <
Packit Service a8c26c
hello
Packit Service a8c26c
HUP
Packit Service a8c26c
)
Packit Service a8c26c
)
Packit Service a8c26c
if	[[ $x != hello ]]
Packit Service a8c26c
then	err_exit "here doc inside command sub not working"
Packit Service a8c26c
fi
Packit Service a8c26c
y=$(cat <
Packit Service a8c26c
${x:+${x}}
Packit Service a8c26c
!
Packit Service a8c26c
)
Packit Service a8c26c
if	[[ $y != "${x:+${x}}" ]]
Packit Service a8c26c
then	err_exit '${x:+${x}} not working in here document'
Packit Service a8c26c
fi
Packit Service a8c26c
$SHELL -c '
Packit Service a8c26c
x=0
Packit Service a8c26c
while (( x < 100 ))
Packit Service a8c26c
do	((x = x+1))
Packit Service a8c26c
	cat << EOF
Packit Service a8c26c
EOF
Packit Service a8c26c
done
Packit Service a8c26c
' 2> /dev/null  || err_exit '100 empty here docs fails'
Packit Service a8c26c
{
Packit Service a8c26c
	print 'builtin -d cat
Packit Service a8c26c
	cat <<- EOF'
Packit Service a8c26c
	for ((i=0; i < 100; i++))
Packit Service a8c26c
	do print XXXXXXXXXXXXXXXXXXXX
Packit Service a8c26c
	done
Packit Service a8c26c
	print ' XXX$(date)XXXX
Packit Service a8c26c
	EOF'
Packit Service a8c26c
} > $f
Packit Service a8c26c
chmod +x "$f"
Packit Service a8c26c
$SHELL "$f" > /dev/null  || err_exit "large here-doc with command substitution fails"
Packit Service a8c26c
x=$(/bin/cat <
Packit Service a8c26c
$0
Packit Service a8c26c
!
Packit Service a8c26c
)
Packit Service a8c26c
[[ "$x" == "$0" ]] || err_exit '$0 not correct inside here documents'
Packit Service a8c26c
$SHELL -c 'x=$(
Packit Service a8c26c
cat << EOF
Packit Service a8c26c
EOF)' 2> /dev/null || err_exit 'here-doc cannot be terminated by )'
Packit Service a8c26c
if	[[ $( IFS=:;cat <<-!
Packit Service a8c26c
			$IFS$(print hi)$IFS
Packit Service a8c26c
		!) != :hi: ]]
Packit Service a8c26c
then	err_exit '$IFS unset by command substitution in here docs'
Packit Service a8c26c
fi
Packit Service a8c26c
if	x=$($SHELL -c 'cat <<< "hello world"' 2> /dev/null)
Packit Service a8c26c
then	[[ $x == 'hello world' ]] || err_exit '<<< documents not working'
Packit Service a8c26c
	x=$($SHELL -c 'v="hello  world";cat <<< $v' 2> /dev/null)
Packit Service a8c26c
	[[ $x == 'hello  world' ]] || err_exit '<<< documents with $x not working'
Packit Service a8c26c
	x=$($SHELL -c 'v="hello  world";cat <<< "$v"' 2> /dev/null)
Packit Service a8c26c
	[[ $x == 'hello  world' ]] || err_exit '<<< documents with $x not working'
Packit Service a8c26c
else	err_exit '<<< syntax not supported'
Packit Service a8c26c
fi
Packit Service a8c26c
if	[[ $(cat << EOF #testing
Packit Service a8c26c
#abc
Packit Service a8c26c
abc
Packit Service a8c26c
EOF) != $'#abc\nabc' ]]
Packit Service a8c26c
then	err_exit 'comments not preserved in here-documents'
Packit Service a8c26c
fi
Packit Service a8c26c
cat  > "$f" <<- '!!!!'
Packit Service a8c26c
	builtin cat
Packit Service a8c26c
	: << EOF
Packit Service a8c26c
	$PWD
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	EOF
Packit Service a8c26c
	command exec 3>&- 4>&- 5>&- 6>&- 7>&- 8>&- 9>&-
Packit Service a8c26c
	x=abc
Packit Service a8c26c
	cat << EOF
Packit Service a8c26c
	$x
Packit Service a8c26c
	EOF
Packit Service a8c26c
!!!!
Packit Service a8c26c
chmod 755 "$f"
Packit Service a8c26c
if	[[ $($SHELL  "$f") != abc ]]
Packit Service a8c26c
then	err_exit	'here document descritor was closed'
Packit Service a8c26c
fi
Packit Service a8c26c
cat  > "$f" <<- '!!!!'
Packit Service a8c26c
	exec 0<&-
Packit Service a8c26c
	foobar()
Packit Service a8c26c
	{
Packit Service a8c26c
		/bin/cat <<- !
Packit Service a8c26c
		foobar
Packit Service a8c26c
		!
Packit Service a8c26c
	}
Packit Service a8c26c
	: << EOF
Packit Service a8c26c
	$PWD
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Packit Service a8c26c
	EOF
Packit Service a8c26c
	print -r -- "$(foobar)"
Packit Service a8c26c
!!!!
Packit Service a8c26c
if	[[ $($SHELL  "$f") != foobar ]]
Packit Service a8c26c
then	err_exit	'here document with stdin closed failed'
Packit Service a8c26c
fi
Packit Service a8c26c
printf $'cat   <<# \\!!!\n\thello\n\t\tworld\n!!!' > $f
Packit Service a8c26c
[[ $($SHELL "$f") == $'hello\n\tworld' ]] || err_exit "<<# not working for quoted here documents"
Packit Service a8c26c
printf $'w=world;cat   <<# !!!\n\thello\n\t\t$w\n!!!' > $f
Packit Service a8c26c
[[ $($SHELL "$f") == $'hello\n\tworld' ]] || err_exit "<<# not working for non-quoted here documents"
Packit Service a8c26c
[[ $( $SHELL  <<- \++++
Packit Service a8c26c
	S=( typeset a )
Packit Service a8c26c
	function S.a.get
Packit Service a8c26c
	{
Packit Service a8c26c
	     .sh.value=$__a
Packit Service a8c26c
	}
Packit Service a8c26c
	__a=1234
Packit Service a8c26c
	cat <<-EOF
Packit Service a8c26c
	${S.a}
Packit Service a8c26c
	EOF
Packit Service a8c26c
++++
Packit Service a8c26c
) == 1234 ]]  2> /dev/null || err_exit 'here document with get discipline failed'
Packit Service a8c26c
[[ $($SHELL -c 'g(){ print ok;}; cat <<- EOF
Packit Service a8c26c
	${ g;}
Packit Service a8c26c
	EOF
Packit Service a8c26c
	' 2> /dev/null) == ok ]] || err_exit '${ command;} not working in heredoc'
Packit Service a8c26c
script=$f
Packit Service a8c26c
{
Packit Service a8c26c
for ((i=0; i < 406; i++))
Packit Service a8c26c
do	print ': 23456789012345678'
Packit Service a8c26c
done
Packit Service a8c26c
print : 123456789123
Packit Service a8c26c
cat <<- \EOF
Packit Service a8c26c
eval "$(
Packit Service a8c26c
	{ cat                                 ; } <
Packit Service a8c26c
	  print  hello
Packit Service a8c26c
	MARKER
Packit Service a8c26c
)"
Packit Service a8c26c
EOF
Packit Service a8c26c
} > $script
Packit Service a8c26c
chmod +x $script
Packit Service a8c26c
[[ $($SHELL $script) == hello ]] 2> /dev/null || err_exit 'heredoc embeded in command substitution fails at buffer boundary'
Packit Service a8c26c
Packit Service a8c26c
got=$( cat << EOF
Packit Service a8c26c
\
Packit Service a8c26c
abc
Packit Service a8c26c
EOF)
Packit Service a8c26c
[[ $got == abc ]] || err_exit 'line continuation at start of buffer not working'
Packit Service a8c26c
Packit Service a8c26c
tmpfile1=$tmp/file1
Packit Service a8c26c
tmpfile2=$tmp/file2
Packit Service a8c26c
function gendata
Packit Service a8c26c
{
Packit Service a8c26c
	typeset -RZ3 i
Packit Service a8c26c
	for ((i=0; i < 500; i++))
Packit Service a8c26c
	do	print -r -- "=====================This is line $i============="
Packit Service a8c26c
	done
Packit Service a8c26c
}
Packit Service a8c26c
Packit Service a8c26c
cat > $tmpfile1 <<- +++
Packit Service a8c26c
	function foobar
Packit Service a8c26c
	{
Packit Service a8c26c
		cat << XXX
Packit Service a8c26c
		$(gendata)
Packit Service a8c26c
		XXX
Packit Service a8c26c
	}
Packit Service a8c26c
	cat > $tmpfile2 <<- EOF
Packit Service a8c26c
	\$(foobar)
Packit Service a8c26c
	$(gendata)
Packit Service a8c26c
EOF
Packit Service a8c26c
+++
Packit Service a8c26c
chmod +x $tmpfile1
Packit Service a8c26c
$SHELL $tmpfile1
Packit Service a8c26c
set -- $(wc < $tmpfile2)
Packit Service a8c26c
(( $1 == 1000 )) || err_exit "heredoc $1 lines, should be 1000 lines"
Packit Service a8c26c
(( $2 == 4000 )) || err_exit "heredoc $2 words, should be 4000 words"
Packit Service a8c26c
Packit Service a8c26c
# comment with here document looses line number count
Packit Service a8c26c
integer line=$((LINENO+5))
Packit Service a8c26c
function tst
Packit Service a8c26c
{
Packit Service a8c26c
	[[ $1 == $2 ]] || echo expected $1, got $2
Packit Service a8c26c
}
Packit Service a8c26c
tst $line $LINENO <<"!" # this comment affects LINENO #
Packit Service a8c26c
1
Packit Service a8c26c
!
Packit Service a8c26c
(( (line+=3) == LINENO )) ||  err_exit "line number=$LINENO should be $line"
Packit Service a8c26c
Packit Service a8c26c
[[ $($SHELL -c 'wc -c <<< ""' 2> /dev/null) == *1 ]] || err_exit '<<< with empty string not working'
Packit Service a8c26c
Packit Service a8c26c
mkdir $tmp/functions
Packit Service a8c26c
cat > $tmp/functions/t2 <<\!!!
Packit Service a8c26c
function t2
Packit Service a8c26c
{
Packit Service a8c26c
cat <
Packit Service a8c26c
${1}
Packit Service a8c26c
EOF
Packit Service a8c26c
}
Packit Service a8c26c
!!!
Packit Service a8c26c
Packit Service a8c26c
FPATH=$tmp/functions
Packit Service a8c26c
foo=${
Packit Service a8c26c
cat <
Packit Service a8c26c
1 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123
Packit Service a8c26c
111111111111111111111111111111111111111111111111111111111111111
Packit Service a8c26c
111111111111111111111111111111111111111111111111111111111111111
Packit Service a8c26c
111111111111111111111111111111111111111111111111111111111111111
Packit Service a8c26c
111111111111111111111111111111111111111111111111111111111111111
Packit Service a8c26c
111111111111111111111111111111111111111111111111111111111111111
Packit Service a8c26c
111111111111111111111111111111111111111111111111111111111111111
Packit Service a8c26c
111111111111111111111111111111111111111111111111111111111111111
Packit Service a8c26c
111111111111111111111111111111111111111111111111111111111111111
Packit Service a8c26c
111111111111111111111111111111111111111111111111111111111111111
Packit Service a8c26c
111111111111111111111111111111111111111111111111111111111111111
Packit Service a8c26c
111111111111111111111111111111111111111111111111111111111111111
Packit Service a8c26c
111111111111111111111111111111111111111111111111111111111111111
Packit Service a8c26c
111111111111111111111111111111111111111111111111111111111111111
Packit Service a8c26c
111111111111111111111111111111111111111111111111111111111111111
Packit Service a8c26c
111111111111111111111111111111111111111111111111111111111111 1
Packit Service a8c26c
Packit Service a8c26c
2 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123
Packit Service a8c26c
222222222222222222222222222222222222222222222222222222222222222
Packit Service a8c26c
222222222222222222222222222222222222222222222222222222222222222
Packit Service a8c26c
222222222222222222222222222222222222222222222222222222222222222
Packit Service a8c26c
222222222222222222222222222222222222222222222222222222222222222
Packit Service a8c26c
222222222222222222222222222222222222222222222222222222222222222
Packit Service a8c26c
222222222222222222222222222222222222222222222222222222222222222
Packit Service a8c26c
222222222222222222222222222222222222222222222222222222222222222
Packit Service a8c26c
222222222222222222222222222222222222222222222222222222222222222
Packit Service a8c26c
222222222222222222222222222222222222222222222222222222222222222
Packit Service a8c26c
222222222222222222222222222222222222222222222222222222222222222
Packit Service a8c26c
222222222222222222222222222222222222222222222222222222222222222
Packit Service a8c26c
222222222222222222222222222222222222222222222222222222222222222
Packit Service a8c26c
222222222222222222222222222222222222222222222222222222222222222
Packit Service a8c26c
222222222222222222222222222222222222222222222222222222222222222
Packit Service a8c26c
222222222222222222222222222222222222222222222222222222222222 2
Packit Service a8c26c
Packit Service a8c26c
3 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123
Packit Service a8c26c
333333333333333333333333333333333333333333333333333333333333333
Packit Service a8c26c
333333333333333333333333333333333333333333333333333333333333333
Packit Service a8c26c
333333333333333333333333333333333333333333333333333333333333333
Packit Service a8c26c
333333333333333333333333333333333333333333333333333333333333333
Packit Service a8c26c
333333333333333333333333333333333333333333333333333333333333333
Packit Service a8c26c
333333333333333333333333333333333333333333333333333333333333333
Packit Service a8c26c
333333333333333333333333333333333333333333333333333333333333333
Packit Service a8c26c
333333333333333333333333333333333333333333333333333333333333333
Packit Service a8c26c
333333333333333333333333333333333333333333333333333333333333333
Packit Service a8c26c
333333333333333333333333333333333333333333333333333333333333333
Packit Service a8c26c
333333333333333333333333333333333333333333333333333333333333333
Packit Service a8c26c
333333333333333333333333333333333333333333333333333333333333333
Packit Service a8c26c
333333333333333333333333333333333333333333333333333333333333333
Packit Service a8c26c
333333333333333333333333333333333333333333333333333333333333333
Packit Service a8c26c
333333333333333333333333333333333333333333333333333333333333 3
Packit Service a8c26c
Packit Service a8c26c
4 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123
Packit Service a8c26c
444444444444444444444444444444444444444444444444444444444444444
Packit Service a8c26c
444444444444444444444444444444444444444444444444444444444444444
Packit Service a8c26c
444444444444444444444444444444444444444444444444444444444444444
Packit Service a8c26c
444444444444444444444444444444444444444444444444444444444444444
Packit Service a8c26c
444444444444444444444444444444444444444444444444444444444444444
Packit Service a8c26c
444444444444444444444444444444444444444444444444444444444444444
Packit Service a8c26c
444444444444444444444444444444444444444444444444444444444444444
Packit Service a8c26c
444444444444444444444444444444444444444444444444444444444444444
Packit Service a8c26c
444444444444444444444444444444444444444444444444444444444444444
Packit Service a8c26c
444444444444444444444444444444444444444444444444444444444444444
Packit Service a8c26c
444444444444444444444444444444444444444444444444444444444444444
Packit Service a8c26c
444444444444444444444444444444444444444444444444444444444444444
Packit Service a8c26c
444444444444444444444444444444444444444444444444444444444444444
Packit Service a8c26c
444444444444444444444444444444444444444444444444444444444444444
Packit Service a8c26c
444444444444444444444444444444444444444444444444444444444444 4
Packit Service a8c26c
Packit Service a8c26c
5 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123
Packit Service a8c26c
555555555555555555555555555555555555555555555555555555555555555
Packit Service a8c26c
555555555555555555555555555555555555555555555555555555555555555
Packit Service a8c26c
555555555555555555555555555555555555555555555555555555555555555
Packit Service a8c26c
555555555555555555555555555555555555555555555555555555555555555
Packit Service a8c26c
555555555555555555555555555555555555555555555555555555555555555
Packit Service a8c26c
555555555555555555555555555555555555555555555555555555555555555
Packit Service a8c26c
555555555555555555555555555555555555555555555555555555555555555
Packit Service a8c26c
555555555555555555555555555555555555555555555555555555555555555
Packit Service a8c26c
555555555555555555555555555555555555555555555555555555555555555
Packit Service a8c26c
555555555555555555555555555555555555555555555555555555555555555
Packit Service a8c26c
555555555555555555555555555555555555555555555555555555555555555
Packit Service a8c26c
555555555555555555555555555555555555555555555555555555555555555
Packit Service a8c26c
555555555555555555555555555555555555555555555555555555555555555
Packit Service a8c26c
555555555555555555555555555555555555555555555555555555555555555
Packit Service a8c26c
555555555555555555555555555555555555555555555555555555555555 5
Packit Service a8c26c
Packit Service a8c26c
6 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123
Packit Service a8c26c
666666666666666666666666666666666666666666666666666666666666666
Packit Service a8c26c
666666666666666666666666666666666666666666666666666666666666666
Packit Service a8c26c
666666666666666666666666666666666666666666666666666666666666666
Packit Service a8c26c
666666666666666666666666666666666666666666666666666666666666666
Packit Service a8c26c
666666666666666666666666666666666666666666666666666666666666666
Packit Service a8c26c
666666666666666666666666666666666666666666666666666666666666666
Packit Service a8c26c
666666666666666666666666666666666666666666666666666666666666666
Packit Service a8c26c
666666666666666666666666666666666666666666666666666666666666666
Packit Service a8c26c
666666666666666666666666666666666666666666666666666666666666666
Packit Service a8c26c
666666666666666666666666666666666666666666666666666666666666666
Packit Service a8c26c
666666666666666666666666666666666666666666666666666666666666666
Packit Service a8c26c
666666666666666666666666666666666666666666666666666666666666666
Packit Service a8c26c
666666666666666666666666666666666666666666666666666666666666666
Packit Service a8c26c
666666666666666666666666666666666666666666666666666666666666666
Packit Service a8c26c
666666666666666666666666666666666666666666666666666666666666 6
Packit Service a8c26c
Packit Service a8c26c
7 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123
Packit Service a8c26c
777777777777777777777777777777777777777777777777777777777777777
Packit Service a8c26c
777777777777777777777777777777777777777777777777777777777777777
Packit Service a8c26c
777777777777777777777777777777777777777777777777777777777777777
Packit Service a8c26c
777777777777777777777777777777777777777777777777777777777777777
Packit Service a8c26c
777777777777777777777777777777777777777777777777777777777777777
Packit Service a8c26c
777777777777777777777777777777777777777777777777777777777777777
Packit Service a8c26c
777777777777777777777777777777777777777777777777777777777777777
Packit Service a8c26c
777777777777777777777777777777777777777777777777777777777777777
Packit Service a8c26c
777777777777777777777777777777777777777777777777777777777777777
Packit Service a8c26c
777777777777777777777777777777777777777777777777777777777777777
Packit Service a8c26c
777777777777777777777777777777777777777777777777777777777777777
Packit Service a8c26c
777777777777777777777777777777777777777777777777777777777777777
Packit Service a8c26c
777777777777777777777777777777777777777777777777777777777777777
Packit Service a8c26c
777777777777777777777777777777777777777777777777777777777777777
Packit Service a8c26c
777777777777777777777777777777777777777777777777777777777777 7
Packit Service a8c26c
Packit Service a8c26c
8 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123
Packit Service a8c26c
888888888888888888888888888888888888888888888888888888888888888
Packit Service a8c26c
888888888888888888888888888888888888888888888888888888888888888
Packit Service a8c26c
888888888888888888888888888888888888888888888888888888888888888
Packit Service a8c26c
888888888888888888888888888888888888888888888888888888888888888
Packit Service a8c26c
888888888888888888888888888888888888888888888888888888888888888
Packit Service a8c26c
888888888888888888888888888888888888888888888888888888888888888
Packit Service a8c26c
888888888888888888888888888888888888888888888888888888888888888
Packit Service a8c26c
888888888888888888888888888888888888888888888888888888888888888
Packit Service a8c26c
888888888888888888888888888888888888888888888888888888888888888
Packit Service a8c26c
888888888888888888888888888888888888888888888888888888888888888
Packit Service a8c26c
888888888888888888888888888888888888888888888888888888888888888
Packit Service a8c26c
888888888888888888888888888888888888888888888888888888888888888
Packit Service a8c26c
888888888888888888888888888888888888888888888888888888888888888
Packit Service a8c26c
888888888888888888888888888888888888888888888888888888888888888
Packit Service a8c26c
888888888888888888888888888888888888888888888888888888888888 8
Packit Service a8c26c
Packit Service a8c26c
9 34567890 $(t2 1234567890 ) 0123456789012345678901234567890123
Packit Service a8c26c
999999999999999999999999999999999999999999999999999999999999999
Packit Service a8c26c
999999999999999999999999999999999999999999999999999999999999999
Packit Service a8c26c
999999999999999999999999999999999999999999999999999999999999999
Packit Service a8c26c
999999999999999999999999999999999999999999999999999999999999999
Packit Service a8c26c
999999999999999999999999999999999999999999999999999999999999999
Packit Service a8c26c
999999999999999999999999999999999999999999999999999999999999999
Packit Service a8c26c
999999999999999999999999999999999999999999999999999999999999999
Packit Service a8c26c
999999999999999999999999999999999999999999999999999999999999999
Packit Service a8c26c
999999999999999999999999999999999999999999999999999999999999999
Packit Service a8c26c
999999999999999999999999999999999999999999999999999999999999999
Packit Service a8c26c
999999999999999999999999999999999999999999999999999999999999999
Packit Service a8c26c
999999999999999999999999999999999999999999999999999999999999999
Packit Service a8c26c
999999999999999999999999999999999999999999999999999999999999999
Packit Service a8c26c
999999999999999999999999999999999999999999999999999999999999999
Packit Service a8c26c
999999999999999999999999999999999999999999999999999999999999 9
Packit Service a8c26c
Packit Service a8c26c
10 4567890 $(t2 1234567890 ) 0123456789012345678901234567890123
Packit Service a8c26c
101010101010101010101010101010101010101010101010101010101010103
Packit Service a8c26c
101010101010101010101010101010101010101010101010101010101010103
Packit Service a8c26c
101010101010101010101010101010101010101010101010101010101010103
Packit Service a8c26c
101010101010101010101010101010101010101010101010101010101010103
Packit Service a8c26c
101010101010101010101010101010101010101010101010101010101010103
Packit Service a8c26c
101010101010101010101010101010101010101010101010101010101010103
Packit Service a8c26c
101010101010101010101010101010101010101010101010101010101010103
Packit Service a8c26c
101010101010101010101010101010101010101010101010101010101010103
Packit Service a8c26c
101010101010101010101010101010101010101010101010101010101010103
Packit Service a8c26c
101010101010101010101010101010101010101010101010101010101010103
Packit Service a8c26c
101010101010101010101010101010101010101010101010101010101010103
Packit Service a8c26c
101010101010101010101010101010101010101010101010101010101010103
Packit Service a8c26c
101010101010101010101010101010101010101010101010101010101010103
Packit Service a8c26c
101010101010101010101010101010101010101010101010101010101010103
Packit Service a8c26c
1010101010101010101010101010101010101010101010101010101010 END
Packit Service a8c26c
Packit Service a8c26c
EOF
Packit Service a8c26c
}
Packit Service a8c26c
[[ ${#foo} == 10238 ]] || err_exit 'large here docs containing command subs of dynamically loaded functions fails'
Packit Service a8c26c
Packit Service a8c26c
{
Packit Service a8c26c
     print $'FOO=1\nBAR=foobarbaz'
Packit Service a8c26c
     print -- 'cat <<#EOF'
Packit Service a8c26c
     integer i
Packit Service a8c26c
     for ((i=0; i < 50000; i++))
Packit Service a8c26c
     do print -r -- '    $(($FOO + 1))'
Packit Service a8c26c
      print -r -- '    $BAR meep'
Packit Service a8c26c
     done
Packit Service a8c26c
     print EOF
Packit Service a8c26c
} > $f
Packit Service a8c26c
$SHELL $f > $g
Packit Service a8c26c
[[ $(grep meep $g | grep -v foobar) != '' ]] && err_exit 'here-doc loosing $var expansions on boundaries in rare cases'
Packit Service a8c26c
Packit Service a8c26c
print foo > $tmp/foofile
Packit Service a8c26c
x=$( $SHELL 2> /dev/null 'read <<< $(<'"$tmp"'/foofile) 2> /dev/null;print -r "$REPLY"')
Packit Service a8c26c
[[ $x == foo ]] || err_exit '<<< $(
Packit Service a8c26c
Packit Service a8c26c
exit $((Errors<125?Errors:125))