]> git.ipfire.org Git - thirdparty/bash.git/blame - tests/builtins.tests
Imported from ../bash-2.01.tar.gz.
[thirdparty/bash.git] / tests / builtins.tests
CommitLineData
d166f048
JA
1# tests for miscellaneous builtins not tested elsewhere
2set +p
3set +o posix
4
5ulimit -c 0 2>/dev/null
6
7# check that break breaks loops
8for i in a b c; do echo $i; break; echo bad-$i; done
9echo end-1
10for i in a b c; do echo $i; break 1; echo bad-$i; done
11echo end-2
12for 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
19done
20echo end-3
21
22# check that break breaks nested loops
23for 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
30done
31echo end
32
33# check that continue continues loops
34for i in a b c; do echo $i; continue; echo bad-$i ; done
35echo end-1
36for i in a b c; do echo $i; continue 1; echo bad-$i; done
37echo end-2
38for 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
45done
46echo end-3
47
48# check that continue breaks out of nested loops
49for 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
56done
57echo end
58
59# check that `eval' re-evaluates arguments, but `builtin' and `command' do not
60AVAR='$BVAR'
61BVAR=foo
62
63echo $AVAR
64builtin echo $AVAR
65command echo $AVAR
66eval echo \$AVAR
67eval echo $AVAR
68
69# test out eval with a temp environment
70AVAR=bar eval echo \$AVAR
71BVAR=xxx eval echo $AVAR
72
73unset -v AVAR BVAR
74
75# test umask
76mask=$(umask)
77umask 022
78umask
79umask -S
80umask -S u=rwx,g=rwx,o=rx >/dev/null # 002
81umask
82umask -S
83umask 0
84umask -S
85umask ${mask} # restore original mask
86
87# builtin/command without arguments should do nothing. maybe someday they will
88builtin
89command
90
91# test enable
92enable -ps
93
94enable -aps ; enable -nps
95
96enable -n test
97case "$(type -t test)" in
98builtin) echo oops -- enable -n test failed ;;
99*) echo enable -n test worked ;;
100esac
101
102enable test
103case "$(type -t test)" in
104builtin) echo enable test worked ;;
105*) echo oops -- enable test failed ;;
106esac
107
108# test options to exec
109(exec -a specialname ${THIS_SH} -c 'echo $0' )
110# test `clean' environment. if /bin/sh is bash, and the script version of
111# printenv is run, there will be variables in the environment that bash
112# sets on startup.
113(export FOO=BAR ; exec -c printenv ) | grep FOO
114(FOO=BAR exec -c printenv ) | grep FOO
115
116(export FOO=BAR ; exec printenv ) | grep FOO
117(FOO=BAR exec printenv ) | grep FOO
118
119# ok, forget everything about hashed commands
120hash -r
121hash
122
123# check out source/.
124
125AVAR=AVAR
126
127. ./source.sub1
128AVAR=foo . ./source.sub1
129
130. ./source.sub2
131echo $?
132
133set -- a b c
134. ./source.sub3
135
136# make sure source with arguments does not change the shell's positional
137# parameters, but that the sourced file sees the arguments as its
138# positional parameters
139echo "$@"
140. ./source.sub3 x y z
141echo "$@"
142
143# but if the sourced script sets the positional parameters explicitly, they
144# should be reflected in the calling shell's positional parameters. this
145# also tests one of the shopt options that controls source using $PATH to
146# find the script
147echo "$@"
148shopt -u sourcepath
149. source.sub4
150echo "$@"
151
152# this is complicated when the sourced scripts gets its own positional
153# parameters from arguments to `.'
154set -- a b c
155echo "$@"
156. source.sub4 x y z
157echo "$@"
158
159# test out cd and $CDPATH
160${THIS_SH} ./builtins.sub1
161
162# in posix mode, assignment statements preceding special builtins are
163# reflected in the shell environment. `.' and `eval' need special-case
164# code.
165set -o posix
166echo $AVAR
167AVAR=foo . ./source.sub1
168echo $AVAR
169
170AVAR=AVAR
171echo $AVAR
172AVAR=foo eval echo \$AVAR
173echo $AVAR
174
175AVAR=AVAR
176echo $AVAR
177AVAR=foo :
178echo $AVAR
179
180# test out kill -l. bash versions prior to 2.01 did `kill -l num' wrong
181set +o posix
182sigone=$(kill -l | sed -n 's:^ 1) *\([^ ]*\)[ ].*$:\1:p')
183
184case "$(kill -l 1)" in
185${sigone/SIG/}) echo ok;;
186*) echo oops -- kill -l failure;;
187esac
188
189# POSIX.2 says that exit statuses > 128 are mapped to signal names by
190# subtracting 128 so you can find out what signal killed a process
191case "$(kill -l $(( 128 + 1)) )" in
192${sigone/SIG/}) echo ok;;
193*) echo oops -- kill -l 129 failure;;
194esac
195
196# out-of-range signal numbers should report the argument in the error
197# message, not 128 less than the argument
198kill -l 4096
199
200# kill -l NAME should return the signal number
201kill -l ${sigone/SIG/}