source: trunk/essentials/app-shells/bash/tests/errors.tests@ 3253

Last change on this file since 3253 was 3228, checked in by bird, 19 years ago

bash 3.1

File size: 5.2 KB
Line 
1# These should all be safe
2LC_ALL=C
3LC_CTYPE=C
4LC_COLLATE=C
5LC_MESSAGES=C
6
7# these tests should all generate errors
8
9# make sure we don't exit prematurely
10set +e
11set +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
17alias -x foo=barz
18unalias -x fooaha
19alias hoowah
20unalias hoowah
21
22# the iteration variable must be a valid identifier
23for 1 in a b c; do echo $1; done
24
25# try to rebind a read-only function
26func()
27{
28 echo func
29}
30readonly -f func
31# make sure `readonly' and `declare' play well together
32declare -Fr
33func()
34{
35 echo bar
36}
37
38# bad option
39unset -x func
40
41# cannot unset readonly functions or variables
42unset -f func
43# or make them not readonly
44declare -fr func
45declare -f +r func
46
47XPATH=$PATH
48declare -r XPATH
49unset -v XPATH
50
51# cannot unset invalid identifiers
52unset /bin/sh
53
54# cannot unset function and variable at the same time
55unset -f -v SHELL
56
57# bad option
58declare -z
59# cannot declare invalid identifiers
60declare -- -z
61declare /bin/sh
62
63# this is the syntax used to export functions in the environment, but
64# it cannot be used with `declare'
65declare -f func='() { echo "this is func"; }'
66
67# bad option to exec -- this should not exit the script
68exec -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'
72export -f XPATH
73
74# this depends on the setting of BREAK_COMPLAINS in config.h.in
75break
76continue
77
78# this should not exit the shell; it did in versions before 2.01
79shift label
80
81# other shells do not complain about the extra arguments; maybe someday
82# we won't either
83set -- a b c
84shift $# label
85# and get rid of the positional parameters
86shift $#
87
88# let without an expression is an error, though maybe it should just return
89# success
90let
91
92# local outside a function is an error
93local
94
95# logout of a non-login shell is an error
96logout
97
98# try to hash a non-existant command
99hash notthere
100
101# bad option to hash, although it may mean `verbose' at some future point
102hash -v
103
104# turn off hashing, then try to hash something
105set +o hashall
106hash -p ${THIS_SH} ${THIS_SH##*/}
107
108# bad identifiers to declare/readonly/export
109export AA[4]
110readonly AA[4]
111
112declare -a AA
113unset AA[-2]
114
115# try to assign to a readonly array
116declare -r AA
117AA=( one two three )
118
119# make sure `readonly -n' doesn't turn off readonly status
120readonly -n AA
121AA=(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'
128shopt -s shift_verbose
129shift $(( $# + 5 ))
130shift -2
131
132# bad shell options
133shopt -s no_such_option
134shopt no_such_option
135
136# non-octal digits for umask and other errors
137umask 09
138umask -S u=rwx:g=rwx:o=rx >/dev/null # 002
139umask -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
142umask -i
143
144# bad assignments shouldn't change the umask
145mask=$(umask)
146umask g=u
147mask2=$(umask)
148if [ "$mask" != "$mask2" ]; then
149 echo "umask errors change process umask"
150fi
151
152# assignment to a readonly variable in environment
153VAR=4
154readonly VAR
155VAR=7 :
156