]>
Commit | Line | Data |
---|---|---|
048b249e CR |
1 | export LC_ALL=C |
2 | export LANG=C | |
3 | ||
4 | if [ $UID -eq 0 ]; then | |
5 | echo "execscript: the test suite should not be run as root" >&2 | |
6 | fi | |
7 | ||
8 | set -- one two three | |
9 | echo before exec1.sub: "$@" | |
10 | echo calling exec1.sub | |
11 | ./exec1.sub aa bb cc dd ee | |
12 | echo after exec1.sub with args: $? | |
13 | ./exec1.sub | |
14 | echo after exec1.sub without args: $? | |
15 | ||
16 | # set up a fixed path so we know notthere will not be found | |
17 | PATH=/usr/bin:/bin:/usr/local/bin: | |
18 | export PATH | |
19 | ||
20 | notthere | |
21 | echo $? | |
22 | ||
23 | # this is iffy, since the error messages may vary from system to system | |
24 | # and /tmp might not exist | |
25 | ln -s ${THIS_SH} /tmp/bash 2>/dev/null | |
26 | if [ -f /tmp/bash ]; then | |
27 | /tmp/bash notthere | |
28 | else | |
29 | ${THIS_SH} notthere | |
30 | fi | |
31 | echo $? | |
32 | rm -f /tmp/bash | |
33 | ||
34 | # /bin/sh should be there on all systems | |
35 | ${THIS_SH} /bin/sh | |
36 | echo $? | |
37 | ||
38 | # try executing a directory | |
39 | / | |
40 | echo $? | |
41 | ||
42 | ${THIS_SH} / | |
43 | echo $? | |
44 | ||
45 | # try sourcing a directory | |
46 | . / | |
47 | echo $? | |
48 | ||
49 | # try sourcing a binary file -- post-2.04 versions don't do the binary file | |
50 | # check, and will probably fail with `command not found', or status 127 | |
51 | # bash-4.1 and later check for 256 NUL characters and fail as binary files | |
52 | # if there are more than that, it's probably binary | |
53 | . ${THIS_SH} 2>/dev/null | |
54 | echo $? | |
55 | ||
56 | # post-bash-2.05 versions allow sourcing non-regular files | |
57 | . /dev/null | |
58 | echo $? | |
59 | ||
60 | # kill two birds with one test -- test out the BASH_ENV code | |
61 | echo echo this is bashenv > /tmp/bashenv | |
62 | export BASH_ENV=/tmp/bashenv | |
63 | ${THIS_SH} ./exec3.sub | |
64 | rm -f /tmp/bashenv | |
65 | unset BASH_ENV | |
66 | ||
67 | # we're resetting the $PATH to empty, so this should be last | |
68 | PATH= | |
69 | ||
70 | notthere | |
71 | echo $? | |
72 | ||
73 | command notthere | |
74 | echo $? | |
75 | ||
76 | command -p notthere | |
77 | echo $? | |
78 | ||
79 | # but -p should guarantee that we find all the standard utilities, even | |
80 | # with an empty or unset $PATH | |
81 | command -p sh -c 'echo this is $0' | |
82 | unset PATH | |
83 | command -p sh -c 'echo this is $0' | |
84 | ||
85 | # a bug in bash before bash-2.01 caused PATH to be set to the empty string | |
86 | # when command -p was run with PATH unset | |
87 | echo ${PATH-unset} | |
88 | ||
89 | echo "echo ok" | ${THIS_SH} -t | |
90 | ||
91 | ${THIS_SH} ./exec2.sub | |
92 | echo $? | |
93 | ||
94 | ${THIS_SH} ./exec4.sub | |
95 | ||
96 | # try exec'ing a command that cannot be found in $PATH | |
97 | ${THIS_SH} ./exec5.sub | |
98 | ||
99 | # this was a bug in bash versions before bash-2.04 | |
100 | ${THIS_SH} -c 'cat </dev/null | cat >/dev/null' >&- | |
101 | ||
102 | # checks for proper return values in subshell commands with inverted return | |
103 | # values | |
104 | ||
105 | ${THIS_SH} ./exec6.sub | |
106 | ||
107 | # checks for properly deciding what constitutes an executable file | |
108 | ${THIS_SH} ./exec7.sub | |
109 | ||
110 | ${THIS_SH} -i ./exec8.sub | |
111 | ||
112 | true | `echo true` & | |
113 | ||
114 | echo after | |
115 | ||
e05be32d | 116 | # Problem with bash at least back to version 3.0 |
048b249e | 117 | ${THIS_SH} -c 'VAR=0; VAR=1 command exec; exit ${VAR}' |
e05be32d CR |
118 | |
119 | # problem with bash through bash-4.1 | |
120 | ( | |
121 | exec /var/empty/nosuch | |
122 | echo bad | |
123 | ) 2>/dev/null | |
124 | [ $? = 127 ] || echo exit status = $? at $LINENO |