diff options
Diffstat (limited to 'tests/redir.tests')
-rw-r--r-- | tests/redir.tests | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/tests/redir.tests b/tests/redir.tests new file mode 100644 index 0000000..2669cd4 --- /dev/null +++ b/tests/redir.tests @@ -0,0 +1,174 @@ +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>/tmp/bash-a +exec 5>/tmp/bash-b +echo "Point 2" + +echo to a 1>&4 +echo to b 1>&5 +cat /tmp/bash-a +cat /tmp/bash-b +exec 11</dev/null +echo "Point 3" + +echo to a 1>&4 +echo to b 1>&5 +cat /tmp/bash-a +cat /tmp/bash-b + +exec 11<&- +echo "Point 4" + +exec 6<>/tmp/bash-c +echo to c 1>&6 +cat /tmp/bash-c +echo "Point 5" + +rm -f /tmp/bash-a /tmp/bash-b /tmp/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 +} + +> /tmp/null-redir-a +testf /tmp/null-redir-a + +$EXIT > /tmp/null-redir-b +testf /tmp/null-redir-b + +( > /tmp/null-redir-c ) +testf /tmp/null-redir-c + +$EXIT > /tmp/null-redir-d & +wait +testf /tmp/null-redir-d + +exit 3 | $EXIT > /tmp/null-redir-e +echo $? -- ${PIPESTATUS[@]} +testf /tmp/null-redir-e + +exit 4 | > /tmp/null-redir-f +echo $? -- ${PIPESTATUS[@]} +testf /tmp/null-redir-f + +> /tmp/null-redir-g & +wait +testf /tmp/null-redir-g + +exec >/tmp/null-redir-h & +wait +testf /tmp/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:=/tmp} + +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 |