194 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| : ${TMPDIR:=/tmp}
 | |
| 
 | |
| export LC_ALL=C
 | |
| export LANG=C
 | |
| 
 | |
| # catch-all for remaining untested redirection stuff
 | |
| set +o posix
 | |
| 
 | |
| echo abc > /tmp/redir-test
 | |
| cat /tmp/redir-test
 | |
| 
 | |
| set -o noclobber
 | |
| 
 | |
| #this should be an error
 | |
| echo def > /tmp/redir-test
 | |
| cat /tmp/redir-test
 | |
| 
 | |
| # but this should succeed
 | |
| echo def > /tmp/redir-test-2
 | |
| cat /tmp/redir-test-2
 | |
| 
 | |
| # and so should this
 | |
| echo def >| /tmp/redir-test
 | |
| cat /tmp/redir-test
 | |
| 
 | |
| set +o noclobber
 | |
| rm /tmp/redir-test /tmp/redir-test-2
 | |
| 
 | |
| # this should be an error
 | |
| z="a b"
 | |
| cat < $z
 | |
| 
 | |
| echo "Point 1"
 | |
| 
 | |
| exec 3</etc/passwd
 | |
| exec 4>$TMPDIR/bash-a
 | |
| exec 5>$TMPDIR/bash-b
 | |
| echo "Point 2"
 | |
| 
 | |
| echo to a 1>&4
 | |
| echo to b 1>&5
 | |
| cat $TMPDIR/bash-a
 | |
| cat $TMPDIR/bash-b
 | |
| exec 11</dev/null
 | |
| echo "Point 3"
 | |
| 
 | |
| echo to a 1>&4
 | |
| echo to b 1>&5
 | |
| cat $TMPDIR/bash-a
 | |
| cat $TMPDIR/bash-b
 | |
| 
 | |
| exec 11<&-
 | |
| echo "Point 4"
 | |
| 
 | |
| exec 6<>$TMPDIR/bash-c
 | |
| echo to c 1>&6
 | |
| cat $TMPDIR/bash-c
 | |
| echo "Point 5"
 | |
| 
 | |
| rm -f $TMPDIR/bash-a $TMPDIR/bash-b $TMPDIR/bash-c
 | |
| 
 | |
| #
 | |
| # Test the effect of input buffering on the shell's input
 | |
| #
 | |
| ${THIS_SH} < redir1.sub
 | |
| 
 | |
| # more open, close, duplicate file descriptors
 | |
| ${THIS_SH} ./redir3.sub < ./redir3.in1
 | |
| 
 | |
| # still more redirections
 | |
| ${THIS_SH} ./redir4.sub < redir4.in1
 | |
| 
 | |
| # various forms of null redirection
 | |
| testf()
 | |
| {
 | |
| 	if [ -f "$1" ]; then
 | |
| 		rm -f "$1"
 | |
| 	else
 | |
| 		echo oops -- $1 not found
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| > $TMPDIR/null-redir-a
 | |
| testf $TMPDIR/null-redir-a
 | |
| 
 | |
| $EXIT > $TMPDIR/null-redir-b
 | |
| testf $TMPDIR/null-redir-b
 | |
| 
 | |
| ( > $TMPDIR/null-redir-c )
 | |
| testf $TMPDIR/null-redir-c
 | |
| 
 | |
| $EXIT > $TMPDIR/null-redir-d &
 | |
| wait
 | |
| testf $TMPDIR/null-redir-d
 | |
| 
 | |
| exit 3 | $EXIT > $TMPDIR/null-redir-e
 | |
| echo $? -- ${PIPESTATUS[@]}
 | |
| testf $TMPDIR/null-redir-e
 | |
| 
 | |
| exit 4 | > $TMPDIR/null-redir-f
 | |
| echo $? -- ${PIPESTATUS[@]}
 | |
| testf $TMPDIR/null-redir-f
 | |
| 
 | |
| > $TMPDIR/null-redir-g &
 | |
| wait
 | |
| testf $TMPDIR/null-redir-g
 | |
| 
 | |
| exec >$TMPDIR/null-redir-h &
 | |
| wait
 | |
| testf $TMPDIR/null-redir-h
 | |
| 
 | |
| # make sure async commands don't get /dev/null as stdin when an explicit
 | |
| # input redirection is supplied
 | |
| for x in 1 2 3; do
 | |
| 	{ read line ; echo $line ; } &
 | |
| 	wait
 | |
| 	{ read line ; echo $line ; } &
 | |
| 	wait
 | |
| done << EOF
 | |
| ab
 | |
| cd
 | |
| ef
 | |
| gh
 | |
| ij
 | |
| kl
 | |
| EOF
 | |
| 
 | |
| # make sure async commands get /dev/null as stdin in the absence of any
 | |
| # input redirection
 | |
| /bin/cat &
 | |
| wait
 | |
| echo $?
 | |
| 
 | |
| # make sure that loops work OK with here documents and are not run in
 | |
| # subshells
 | |
| while read line; do
 | |
| 	echo $line
 | |
| 	l2=$line
 | |
| done << EOF
 | |
| ab
 | |
| cd
 | |
| EOF
 | |
| echo $l2
 | |
| 
 | |
| # These should not echo anything -- bug in versions before 2.04
 | |
| ( ( echo hello 1>&3 ) 3>&1 ) >/dev/null 2>&1
 | |
| 
 | |
| ( ( echo hello 1>&3 ) 3>&1 ) >/dev/null 2>&1 | cat
 | |
| 
 | |
| # in posix mode, non-interactive shells are not allowed to perform
 | |
| # filename expansion on input redirections, even if they expand to
 | |
| # a single filename
 | |
| set -o posix
 | |
| cat < redir1.*
 | |
| 
 | |
| # test ksh93 dup-and-close (move fd) redirections
 | |
| ${THIS_SH} ./redir5.sub
 | |
| 
 | |
| # test behavior after a write error with a builtin command
 | |
| ${THIS_SH} ./redir6.sub
 | |
| 
 | |
| # problem with redirections using fds bash uses internally
 | |
| : ${TMPDIR:=$TMPDIR}
 | |
| 
 | |
| trap 'rm -f $TMPDIR/bash-redir-$$' 0 1 2 3 6 15
 | |
| 
 | |
| echo before block
 | |
| {
 | |
| 	echo before redir
 | |
| 	exec 10>&1
 | |
| 	echo after redir
 | |
| } > $TMPDIR/bash-redir-$$
 | |
| 
 | |
| echo after block
 | |
| 
 | |
| ${THIS_SH} ./redir7.sub
 | |
| 
 | |
| ${THIS_SH} ./redir8.sub
 | |
| 
 | |
| exec 9>&2
 | |
| command exec 2>$TMPDIR/foo-$$
 | |
| echo whatsis >&2
 | |
| echo cat /tmp/foo
 | |
| cat $TMPDIR/foo-$$
 | |
| rm -f $TMPDIR/foo-$$
 | |
| exec 2>&9
 | |
| exec 9>&-
 | |
| 
 | |
| ${THIS_SH} ./redir9.sub
 | |
| 
 | |
| ${THIS_SH} ./redir10.sub
 | |
| 
 | |
| ${THIS_SH} ./redir11.sub
 | |
| ${THIS_SH} ./redir12.sub
 | 
