]>
Commit | Line | Data |
---|---|---|
d166f048 JA |
1 | # tests for miscellaneous builtins not tested elsewhere |
2 | set +p | |
3 | set +o posix | |
4 | ||
5 | ulimit -c 0 2>/dev/null | |
6 | ||
7 | # check that break breaks loops | |
8 | for i in a b c; do echo $i; break; echo bad-$i; done | |
9 | echo end-1 | |
10 | for i in a b c; do echo $i; break 1; echo bad-$i; done | |
11 | echo end-2 | |
12 | for i in a b c; do | |
13 | for j in x y z; do | |
14 | echo $i:$j | |
15 | break | |
16 | echo bad-$i | |
17 | done | |
18 | echo end-$i | |
19 | done | |
20 | echo end-3 | |
21 | ||
22 | # check that break breaks nested loops | |
23 | for i in a b c; do | |
24 | for j in x y z; do | |
25 | echo $i:$j | |
26 | break 2 | |
27 | echo bad-$i | |
28 | done | |
29 | echo end-$i | |
30 | done | |
31 | echo end | |
32 | ||
33 | # check that continue continues loops | |
34 | for i in a b c; do echo $i; continue; echo bad-$i ; done | |
35 | echo end-1 | |
36 | for i in a b c; do echo $i; continue 1; echo bad-$i; done | |
37 | echo end-2 | |
38 | for i in a b c; do | |
39 | for j in x y z; do | |
40 | echo $i:$j | |
41 | continue | |
42 | echo bad-$i-$j | |
43 | done | |
44 | echo end-$i | |
45 | done | |
46 | echo end-3 | |
47 | ||
48 | # check that continue breaks out of nested loops | |
49 | for i in a b c; do | |
50 | for j in x y z; do | |
51 | echo $i:$j | |
52 | continue 2 | |
53 | echo bad-$i-$j | |
54 | done | |
55 | echo end-$i | |
56 | done | |
57 | echo end | |
58 | ||
59 | # check that `eval' re-evaluates arguments, but `builtin' and `command' do not | |
60 | AVAR='$BVAR' | |
61 | BVAR=foo | |
62 | ||
63 | echo $AVAR | |
64 | builtin echo $AVAR | |
65 | command echo $AVAR | |
66 | eval echo \$AVAR | |
67 | eval echo $AVAR | |
68 | ||
69 | # test out eval with a temp environment | |
70 | AVAR=bar eval echo \$AVAR | |
71 | BVAR=xxx eval echo $AVAR | |
72 | ||
73 | unset -v AVAR BVAR | |
74 | ||
75 | # test umask | |
76 | mask=$(umask) | |
77 | umask 022 | |
78 | umask | |
79 | umask -S | |
80 | umask -S u=rwx,g=rwx,o=rx >/dev/null # 002 | |
81 | umask | |
82 | umask -S | |
cce855bc JA |
83 | umask -p |
84 | umask -p -S | |
d166f048 JA |
85 | umask 0 |
86 | umask -S | |
87 | umask ${mask} # restore original mask | |
88 | ||
89 | # builtin/command without arguments should do nothing. maybe someday they will | |
90 | builtin | |
91 | command | |
92 | ||
93 | # test enable | |
94 | enable -ps | |
95 | ||
96 | enable -aps ; enable -nps | |
97 | ||
98 | enable -n test | |
99 | case "$(type -t test)" in | |
100 | builtin) echo oops -- enable -n test failed ;; | |
101 | *) echo enable -n test worked ;; | |
102 | esac | |
103 | ||
104 | enable test | |
105 | case "$(type -t test)" in | |
106 | builtin) echo enable test worked ;; | |
107 | *) echo oops -- enable test failed ;; | |
108 | esac | |
109 | ||
110 | # test options to exec | |
111 | (exec -a specialname ${THIS_SH} -c 'echo $0' ) | |
cce855bc | 112 | (exec -l -a specialname ${THIS_SH} -c 'echo $0' ) |
d166f048 JA |
113 | # test `clean' environment. if /bin/sh is bash, and the script version of |
114 | # printenv is run, there will be variables in the environment that bash | |
cce855bc JA |
115 | # sets on startup. Also test code that prefixes argv[0] with a dash. |
116 | (export FOO=BAR ; exec -c -l printenv ) | grep FOO | |
d166f048 JA |
117 | (FOO=BAR exec -c printenv ) | grep FOO |
118 | ||
119 | (export FOO=BAR ; exec printenv ) | grep FOO | |
120 | (FOO=BAR exec printenv ) | grep FOO | |
121 | ||
122 | # ok, forget everything about hashed commands | |
123 | hash -r | |
124 | hash | |
125 | ||
cce855bc JA |
126 | # this had better succeed, since command -p guarantees we will find the |
127 | # standard utilties | |
128 | command -p hash rm | |
129 | ||
d166f048 JA |
130 | # check out source/. |
131 | ||
cce855bc JA |
132 | # sourcing a zero-length-file had better not be an error |
133 | rm -f /tmp/zero-length-file | |
134 | cp /dev/null /tmp/zero-length-file | |
135 | . /tmp/zero-length-file | |
136 | echo $? | |
137 | rm /tmp/zero-length-file | |
138 | ||
d166f048 JA |
139 | AVAR=AVAR |
140 | ||
cce855bc JA |
141 | . ./source1.sub |
142 | AVAR=foo . ./source1.sub | |
d166f048 | 143 | |
cce855bc | 144 | . ./source2.sub |
d166f048 JA |
145 | echo $? |
146 | ||
147 | set -- a b c | |
cce855bc | 148 | . ./source3.sub |
d166f048 JA |
149 | |
150 | # make sure source with arguments does not change the shell's positional | |
151 | # parameters, but that the sourced file sees the arguments as its | |
152 | # positional parameters | |
153 | echo "$@" | |
cce855bc | 154 | . ./source3.sub x y z |
d166f048 JA |
155 | echo "$@" |
156 | ||
157 | # but if the sourced script sets the positional parameters explicitly, they | |
158 | # should be reflected in the calling shell's positional parameters. this | |
159 | # also tests one of the shopt options that controls source using $PATH to | |
160 | # find the script | |
161 | echo "$@" | |
162 | shopt -u sourcepath | |
cce855bc | 163 | . source4.sub |
d166f048 JA |
164 | echo "$@" |
165 | ||
166 | # this is complicated when the sourced scripts gets its own positional | |
167 | # parameters from arguments to `.' | |
168 | set -- a b c | |
169 | echo "$@" | |
cce855bc | 170 | . source4.sub x y z |
d166f048 JA |
171 | echo "$@" |
172 | ||
173 | # test out cd and $CDPATH | |
bb70624e | 174 | ${THIS_SH} ./builtins1.sub |
d166f048 | 175 | |
cce855bc JA |
176 | # test behavior of `.' when given a non-existant file argument |
177 | ${THIS_SH} ./source5.sub | |
178 | ||
d3ad40de CR |
179 | # test bugs in sourcing non-regular files, fixed post-bash-3.2 |
180 | ${THIS_SH} ./source6.sub | |
181 | ||
b6e23235 CR |
182 | # test bugs with source called from multiline aliases and other contexts |
183 | ${THIS_SH} ./source7.sub | |
184 | ||
d166f048 JA |
185 | # in posix mode, assignment statements preceding special builtins are |
186 | # reflected in the shell environment. `.' and `eval' need special-case | |
187 | # code. | |
188 | set -o posix | |
189 | echo $AVAR | |
cce855bc | 190 | AVAR=foo . ./source1.sub |
d166f048 JA |
191 | echo $AVAR |
192 | ||
193 | AVAR=AVAR | |
194 | echo $AVAR | |
195 | AVAR=foo eval echo \$AVAR | |
196 | echo $AVAR | |
197 | ||
198 | AVAR=AVAR | |
199 | echo $AVAR | |
200 | AVAR=foo : | |
201 | echo $AVAR | |
cce855bc JA |
202 | set +o posix |
203 | ||
204 | # but assignment statements preceding `export' are always reflected in | |
205 | # the environment | |
206 | foo="" export foo | |
207 | declare -p foo | |
208 | unset foo | |
209 | ||
210 | # assignment statements preceding `declare' should be displayed correctly, | |
211 | # but not persist after the command | |
212 | FOO='$$' declare -p FOO | |
213 | declare -p FOO | |
214 | unset FOO | |
215 | ||
216 | # except for `declare -x', which should be equivalent to `export' | |
217 | FOO='$$' declare -x FOO | |
218 | declare -p FOO | |
219 | unset FOO | |
d166f048 JA |
220 | |
221 | # test out kill -l. bash versions prior to 2.01 did `kill -l num' wrong | |
d166f048 JA |
222 | sigone=$(kill -l | sed -n 's:^ 1) *\([^ ]*\)[ ].*$:\1:p') |
223 | ||
224 | case "$(kill -l 1)" in | |
225 | ${sigone/SIG/}) echo ok;; | |
226 | *) echo oops -- kill -l failure;; | |
227 | esac | |
228 | ||
cce855bc JA |
229 | # kill -l and trap -l should display exactly the same output |
230 | sigonea=$(trap -l | sed -n 's:^ 1) *\([^ ]*\)[ ].*$:\1:p') | |
231 | ||
232 | if [ "$sigone" != "$sigonea" ]; then | |
233 | echo oops -- kill -l and trap -l differ | |
234 | fi | |
235 | ||
d166f048 JA |
236 | # POSIX.2 says that exit statuses > 128 are mapped to signal names by |
237 | # subtracting 128 so you can find out what signal killed a process | |
238 | case "$(kill -l $(( 128 + 1)) )" in | |
239 | ${sigone/SIG/}) echo ok;; | |
240 | *) echo oops -- kill -l 129 failure;; | |
241 | esac | |
242 | ||
243 | # out-of-range signal numbers should report the argument in the error | |
244 | # message, not 128 less than the argument | |
245 | kill -l 4096 | |
246 | ||
247 | # kill -l NAME should return the signal number | |
248 | kill -l ${sigone/SIG/} | |
cce855bc | 249 | |
bb70624e JA |
250 | # test behavior of shopt xpg_echo |
251 | ${THIS_SH} ./builtins2.sub | |
252 | ||
3d35553a CR |
253 | # test behavior of declare -g |
254 | ${THIS_SH} ./builtins3.sub | |
255 | ||
8b20235a CR |
256 | # test behavior of using declare to create variables without assigning values |
257 | ${THIS_SH} ./builtins4.sub | |
258 | ||
cce855bc JA |
259 | # this must be last -- it is a fatal error |
260 | exit status | |
261 | ||
262 | echo after bad exit |