4ead467b1807b0b5e5d08229c80df6299aa8fab3
[platform/upstream/bash.git] / tests / errors.tests
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
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
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
38 # bad option
39 unset -x func
40
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
54 # cannot unset function and variable at the same time
55 unset -f -v SHELL
56
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
67 # bad option to exec -- this should not exit the script
68 exec -i /bin/sh
69
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
95 # logout of a non-login shell is an error
96 logout
97
98 # try to hash a non-existant command
99 hash notthere
100
101 # bad option to hash, although it may mean `verbose' at some future point
102 hash -v
103
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
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
124 # NOTE: this works in post-bash-2.05 (at least when I write this)
125 # readonly -a ZZZ=bbb
126
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
140
141 # at some point, this may mean `invert', but for now it is an error
142 umask -i
143
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
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 )
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 -
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
195 # this is an error -- bad timeout spec
196 read -t var < /dev/null
197
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
204 # bad option to readonly/export
205 readonly -x foo
206
207 # someday these may mean something, but for now they're errors
208 eval -i "echo $-"
209 command -i "echo $-"
210
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
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
221 # we have a ksh-like ERR trap, post-bash-2.05
222 #trap 'echo [$LINENO] -- error' ERR
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
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
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