]>
Commit | Line | Data |
---|---|---|
d166f048 JA |
1 | # These should all be safe |
2 | LC_ALL=C | |
3 | LC_CTYPE=C | |
4 | LC_COLLATE=C | |
5 | LC_MESSAGES=C | |
6 | ||
7 | # these tests should all generate errors | |
8 | ||
9 | # make sure we don't exit prematurely | |
10 | set +e | |
11 | set +o posix | |
12 | ||
cce855bc JA |
13 | # various alias/unalias errors |
14 | ||
15 | # at some point, this may mean to `export' an alias, like ksh, but | |
16 | # for now it is an error | |
17 | alias -x foo=barz | |
18 | unalias -x fooaha | |
19 | alias hoowah | |
20 | unalias hoowah | |
21 | ||
d166f048 JA |
22 | # the iteration variable must be a valid identifier |
23 | for 1 in a b c; do echo $1; done | |
24 | ||
25 | # try to rebind a read-only function | |
26 | func() | |
27 | { | |
28 | echo func | |
29 | } | |
30 | readonly -f func | |
31 | # make sure `readonly' and `declare' play well together | |
32 | declare -Fr | |
33 | func() | |
34 | { | |
35 | echo bar | |
36 | } | |
37 | ||
cce855bc JA |
38 | # bad option |
39 | unset -x func | |
40 | ||
d166f048 JA |
41 | # cannot unset readonly functions or variables |
42 | unset -f func | |
43 | # or make them not readonly | |
44 | declare -fr func | |
45 | declare -f +r func | |
46 | ||
47 | XPATH=$PATH | |
48 | declare -r XPATH | |
49 | unset -v XPATH | |
50 | ||
51 | # cannot unset invalid identifiers | |
52 | unset /bin/sh | |
53 | ||
cce855bc JA |
54 | # cannot unset function and variable at the same time |
55 | unset -f -v SHELL | |
56 | ||
d166f048 JA |
57 | # bad option |
58 | declare -z | |
59 | # cannot declare invalid identifiers | |
60 | declare -- -z | |
61 | declare /bin/sh | |
62 | ||
63 | # this is the syntax used to export functions in the environment, but | |
64 | # it cannot be used with `declare' | |
65 | declare -f func='() { echo "this is func"; }' | |
66 | ||
cce855bc JA |
67 | # bad option to exec -- this should not exit the script |
68 | exec -i /bin/sh | |
69 | ||
d166f048 JA |
70 | # try to export -f something that is not a function -- this should be |
71 | # an error, not create an `invisible function' | |
72 | export -f XPATH | |
73 | ||
74 | # this depends on the setting of BREAK_COMPLAINS in config.h.in | |
75 | break | |
76 | continue | |
77 | ||
78 | # this should not exit the shell; it did in versions before 2.01 | |
79 | shift label | |
80 | ||
81 | # other shells do not complain about the extra arguments; maybe someday | |
82 | # we won't either | |
83 | set -- a b c | |
84 | shift $# label | |
85 | # and get rid of the positional parameters | |
86 | shift $# | |
87 | ||
88 | # let without an expression is an error, though maybe it should just return | |
89 | # success | |
90 | let | |
91 | ||
92 | # local outside a function is an error | |
93 | local | |
94 | ||
cce855bc JA |
95 | # logout of a non-login shell is an error |
96 | logout | |
97 | ||
d166f048 JA |
98 | # try to hash a non-existant command |
99 | hash notthere | |
100 | ||
cce855bc JA |
101 | # bad option to hash, although it may mean `verbose' at some future point |
102 | hash -v | |
103 | ||
d166f048 JA |
104 | # turn off hashing, then try to hash something |
105 | set +o hashall | |
106 | hash -p ${THIS_SH} ${THIS_SH##*/} | |
107 | ||
108 | # bad identifiers to declare/readonly/export | |
109 | export AA[4] | |
110 | readonly AA[4] | |
111 | ||
112 | declare -a AA | |
113 | unset AA[-2] | |
114 | ||
115 | # try to assign to a readonly array | |
116 | declare -r AA | |
117 | AA=( one two three ) | |
118 | ||
cce855bc JA |
119 | # make sure `readonly -n' doesn't turn off readonly status |
120 | readonly -n AA | |
121 | AA=(one two three) | |
122 | ||
123 | # try to assign a readonly array with bad assignment syntax | |
f73dda09 JA |
124 | # NOTE: this works in post-bash-2.05 (at least when I write this) |
125 | # readonly -a ZZZ=bbb | |
cce855bc | 126 | |
d166f048 JA |
127 | # bad counts to `shift' |
128 | shopt -s shift_verbose | |
129 | shift $(( $# + 5 )) | |
130 | shift -2 | |
131 | ||
132 | # bad shell options | |
133 | shopt -s no_such_option | |
134 | shopt no_such_option | |
135 | ||
136 | # non-octal digits for umask and other errors | |
137 | umask 09 | |
138 | umask -S u=rwx:g=rwx:o=rx >/dev/null # 002 | |
139 | umask -S u:rwx,g:rwx,o:rx >/dev/null # 002 | |
cce855bc JA |
140 | |
141 | # at some point, this may mean `invert', but for now it is an error | |
142 | umask -i | |
d166f048 | 143 | |
bb70624e JA |
144 | # bad assignments shouldn't change the umask |
145 | mask=$(umask) | |
146 | umask g=u | |
147 | mask2=$(umask) | |
148 | if [ "$mask" != "$mask2" ]; then | |
149 | echo "umask errors change process umask" | |
150 | fi | |
151 | ||
d166f048 JA |
152 | # assignment to a readonly variable in environment |
153 | VAR=4 | |
154 | readonly VAR | |
155 | VAR=7 : | |
156 | ||
157 | # more readonly variable tests | |
158 | declare VAR=88 | |
159 | declare +r VAR | |
160 | ||
161 | declare -p unset | |
162 | ||
163 | # iteration variable in a for statement being readonly | |
164 | for VAR in 1 2 3 ; do echo $VAR; done | |
165 | ||
166 | # parser errors | |
167 | : $( for z in 1 2 3; do ) | |
168 | : $( for z in 1 2 3; done ) | |
169 | ||
170 | # various `cd' errors | |
171 | ( unset HOME ; cd ) | |
cce855bc JA |
172 | ( HOME=/tmp/xyz.bash ; cd ) |
173 | # errors from cd | |
174 | cd - | |
175 | cd /bin/sh # error - not a directory | |
176 | OLDPWD=/tmp/cd-notthere | |
177 | cd - | |
d166f048 JA |
178 | |
179 | # various `source/.' errors | |
180 | . | |
181 | source | |
182 | ||
183 | # maybe someday this will work like in rc | |
184 | . -i /dev/tty | |
185 | ||
186 | # make sure that this gives an error rather than setting $1 | |
187 | set -q | |
188 | ||
189 | # enable non-builtins | |
190 | enable sh bash | |
191 | ||
192 | # try to set and unset shell options simultaneously | |
193 | shopt -s -u checkhash | |
194 | ||
bb70624e | 195 | # this is an error -- bad timeout spec |
cce855bc JA |
196 | read -t var < /dev/null |
197 | ||
d166f048 JA |
198 | # try to read into an invalid identifier |
199 | read /bin/sh < /dev/null | |
200 | ||
201 | # try to read into a readonly variable | |
202 | read VAR < /dev/null | |
203 | ||
cce855bc JA |
204 | # bad option to readonly/export |
205 | readonly -x foo | |
206 | ||
d166f048 JA |
207 | # someday these may mean something, but for now they're errors |
208 | eval -i "echo $-" | |
209 | command -i "echo $-" | |
210 | ||
cce855bc JA |
211 | # this caused a core dump in bash-2.01 (fixed in bash-2.01.1) |
212 | eval echo \$[/bin/sh + 0] | |
213 | eval echo '$((/bin/sh + 0))' | |
214 | ||
d166f048 JA |
215 | # error to list trap for an unknown signal |
216 | trap -p NOSIG | |
217 | ||
218 | # maybe someday trap will take a -s argument like kill, but not now | |
219 | trap -p -s NOSIG | |
220 | ||
f73dda09 JA |
221 | # we have a ksh-like ERR trap, post-bash-2.05 |
222 | #trap 'echo [$LINENO] -- error' ERR | |
d166f048 JA |
223 | |
224 | # can only return from a function or sourced script | |
225 | return 2 | |
226 | ||
227 | # break and continue with arguments <= 0 | |
228 | for z in 1 2 3; do | |
229 | break 0 | |
230 | echo $x | |
231 | done | |
232 | for z in 1 2 3; do | |
233 | continue 0 | |
234 | echo $x | |
235 | done | |
236 | ||
237 | # builtin with non-builtin | |
238 | builtin bash | |
239 | ||
240 | # maybe someday you will be able to use fg/bg when job control is not really | |
241 | # active, but for now they are errors | |
242 | bg | |
243 | fg | |
244 | ||
245 | # argument required | |
246 | kill -s | |
247 | # bad argument | |
248 | kill -S | |
cce855bc JA |
249 | # null argument |
250 | kill -INT '' | |
251 | # argument required | |
252 | kill -INT | |
253 | ||
254 | # bad shell option names | |
255 | set -o trackall # bash is not ksh | |
d166f048 JA |
256 | |
257 | # this must be last! | |
258 | # in posix mode, a function name must be a valid identifier | |
259 | # this can't go in posix2.tests, since it causes the shell to exit | |
260 | # immediately | |
261 | set -o posix | |
262 | function !! () { fc -s "$@" ; } | |
263 | set +o posix | |
264 | ||
265 | echo end |