~ubuntu-branches/ubuntu/trusty/bash/trusty-security

« back to all changes in this revision

Viewing changes to tests/builtins.tests

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2014-03-03 22:52:05 UTC
  • mfrom: (1.3.5) (2.2.6 experimental)
  • Revision ID: package-import@ubuntu.com-20140303225205-87ltrt5kspeq0g1b
Tags: 4.3-1ubuntu1
* Merge with Debian; remaining changes:
  - skel.bashrc:
    - Run lesspipe.
    - Enable ls aliases.
    - Set options in ll alias to -alF.
    - Define an alert alias.
    - Enabled colored grep aliases.
  - etc.bash.bashrc:
    - Add sudo hint.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
83
umask -p
 
84
umask -p -S
 
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' )
 
112
(exec -l -a specialname ${THIS_SH} -c 'echo $0' )
 
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
 
115
# sets on startup.  Also test code that prefixes argv[0] with a dash.
 
116
(export FOO=BAR ; exec -c -l printenv ) | grep FOO
 
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
 
 
126
# this had better succeed, since command -p guarantees we will find the
 
127
# standard utilties
 
128
command -p hash rm
 
129
 
 
130
# check out source/.
 
131
 
 
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
 
 
139
AVAR=AVAR
 
140
 
 
141
. ./source1.sub
 
142
AVAR=foo . ./source1.sub
 
143
 
 
144
. ./source2.sub
 
145
echo $?
 
146
 
 
147
set -- a b c
 
148
. ./source3.sub
 
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 "$@"
 
154
. ./source3.sub x y z
 
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
 
163
. source4.sub
 
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 "$@"
 
170
. source4.sub x y z
 
171
echo "$@"
 
172
 
 
173
# test out cd and $CDPATH
 
174
${THIS_SH} ./builtins1.sub
 
175
 
 
176
# test behavior of `.' when given a non-existant file argument
 
177
${THIS_SH} ./source5.sub
 
178
 
 
179
# test bugs in sourcing non-regular files, fixed post-bash-3.2
 
180
${THIS_SH} ./source6.sub
 
181
 
 
182
# test bugs with source called from multiline aliases and other contexts
 
183
${THIS_SH} ./source7.sub
 
184
 
 
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
 
190
AVAR=foo . ./source1.sub
 
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
 
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
 
220
 
 
221
# test out kill -l.  bash versions prior to 2.01 did `kill -l num' wrong
 
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
 
 
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
 
 
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/}
 
249
 
 
250
# test behavior of shopt xpg_echo
 
251
${THIS_SH} ./builtins2.sub
 
252
 
 
253
# test behavior of declare -g
 
254
${THIS_SH} ./builtins3.sub
 
255
 
 
256
# test behavior of using declare to create variables without assigning values
 
257
${THIS_SH} ./builtins4.sub
 
258
 
 
259
# this must be last -- it is a fatal error
 
260
exit status
 
261
 
 
262
echo after bad exit