init version.
[bush.git] / tests / 3.cli / redir / redir.tests
blobfd498aec5f90ca8fbd49b2fed41954dd2debde08
1 #   This program is free software: you can redistribute it and/or modify
2 #   it under the terms of the GNU General Public License as published by
3 #   the Free Software Foundation, either version 3 of the License, or
4 #   (at your option) any later version.
6 #   This program is distributed in the hope that it will be useful,
7 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
8 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9 #   GNU General Public License for more details.
11 #   You should have received a copy of the GNU General Public License
12 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
14 : ${TMPDIR:=/tmp}
16 export LC_ALL=C
17 export LANG=C
19 # catch-all for remaining untested redirection stuff
20 set +o posix
22 echo abc > /tmp/redir-test
23 cat /tmp/redir-test
25 set -o noclobber
27 #this should be an error
28 echo def > /tmp/redir-test
29 cat /tmp/redir-test
31 # but this should succeed
32 echo def > /tmp/redir-test-2
33 cat /tmp/redir-test-2
35 # and so should this
36 echo def >| /tmp/redir-test
37 cat /tmp/redir-test
39 set +o noclobber
40 rm /tmp/redir-test /tmp/redir-test-2
42 # this should be an error
43 z="a b"
44 cat < $z
46 echo "Point 1"
48 exec 3</etc/passwd
49 exec 4>$TMPDIR/bush-a
50 exec 5>$TMPDIR/bush-b
51 echo "Point 2"
53 echo to a 1>&4
54 echo to b 1>&5
55 cat $TMPDIR/bush-a
56 cat $TMPDIR/bush-b
57 exec 11</dev/null
58 echo "Point 3"
60 echo to a 1>&4
61 echo to b 1>&5
62 cat $TMPDIR/bush-a
63 cat $TMPDIR/bush-b
65 exec 11<&-
66 echo "Point 4"
68 exec 6<>$TMPDIR/bush-c
69 echo to c 1>&6
70 cat $TMPDIR/bush-c
71 echo "Point 5"
73 # clean up before running scripts
74 exec 4>&- 5>&- 6<&-
76 rm -f $TMPDIR/bush-a $TMPDIR/bush-b $TMPDIR/bush-c
79 # Test the effect of input buffering on the shell's input
81 ${THIS_SH} < redir1.sub
83 # more open, close, duplicate file descriptors
84 ${THIS_SH} ./redir3.sub < ./redir3.in1
86 # still more redirections
87 ${THIS_SH} ./redir4.sub < redir4.in1
89 # various forms of null redirection
90 testf()
92         if [ -f "$1" ]; then
93                 rm -f "$1"
94         else
95                 echo oops -- $1 not found
96         fi
99 > $TMPDIR/null-redir-a
100 testf $TMPDIR/null-redir-a
102 $EXIT > $TMPDIR/null-redir-b
103 testf $TMPDIR/null-redir-b
105 ( > $TMPDIR/null-redir-c )
106 testf $TMPDIR/null-redir-c
108 $EXIT > $TMPDIR/null-redir-d &
109 wait
110 testf $TMPDIR/null-redir-d
112 exit 3 | $EXIT > $TMPDIR/null-redir-e
113 echo $? -- ${PIPESTATUS[@]}
114 testf $TMPDIR/null-redir-e
116 exit 4 | > $TMPDIR/null-redir-f
117 echo $? -- ${PIPESTATUS[@]}
118 testf $TMPDIR/null-redir-f
120 > $TMPDIR/null-redir-g &
121 wait
122 testf $TMPDIR/null-redir-g
124 exec >$TMPDIR/null-redir-h &
125 wait
126 testf $TMPDIR/null-redir-h
128 # make sure async commands don't get /dev/null as stdin when an explicit
129 # input redirection is supplied
130 for x in 1 2 3; do
131         { read line ; echo $line ; } &
132         wait
133         { read line ; echo $line ; } &
134         wait
135 done << EOF
144 # make sure async commands get /dev/null as stdin in the absence of any
145 # input redirection
146 /bin/cat &
147 wait
148 echo $?
150 # make sure that loops work OK with here documents and are not run in
151 # subshells
152 while read line; do
153         echo $line
154         l2=$line
155 done << EOF
159 echo $l2
161 # These should not echo anything -- bug in versions before 2.04
162 ( ( echo hello 1>&3 ) 3>&1 ) >/dev/null 2>&1
164 ( ( echo hello 1>&3 ) 3>&1 ) >/dev/null 2>&1 | cat
166 # in posix mode, non-interactive shells are not allowed to perform
167 # filename expansion on input redirections, even if they expand to
168 # a single filename
169 set -o posix
170 cat < redir1.*
172 # test ksh93 dup-and-close (move fd) redirections
173 ${THIS_SH} ./redir5.sub
175 # test behavior after a write error with a builtin command
176 ${THIS_SH} ./redir6.sub
178 # problem with redirections using fds bush uses internally
179 : ${TMPDIR:=$TMPDIR}
181 trap 'rm -f $TMPDIR/bush-redir-$$' 0 1 2 3 6 15
183 echo before block
185         echo before redir
186         exec 10>&1
187         echo after redir
188 } > $TMPDIR/bush-redir-$$
190 echo after block
192 ${THIS_SH} ./redir7.sub
194 ${THIS_SH} ./redir8.sub
196 exec 9>&2
197 command exec 2>$TMPDIR/foo-$$
198 echo whatsis >&2
199 echo cat /tmp/foo
200 cat $TMPDIR/foo-$$
201 rm -f $TMPDIR/foo-$$
202 exec 2>&9
203 exec 9>&-
205 ${THIS_SH} ./redir9.sub
207 ${THIS_SH} ./redir10.sub
209 ${THIS_SH} ./redir11.sub