1 |
#
|
2 |
# Miscellaneous tests for the command language.
|
3 |
|
4 |
|
5 |
PATH=/bin
|
6 |
|
7 |
{ which ls; }
|
8 |
## stdout: /bin/ls
|
9 |
|
10 |
|
11 |
touch $TMP/text-file
|
12 |
$TMP/text-file
|
13 |
## status: 126
|
14 |
|
15 |
|
16 |
$TMP/not-a-dir/text-file
|
17 |
## status: 127
|
18 |
|
19 |
|
20 |
./0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
21 |
## status: 127
|
22 |
## OK dash status: 2
|
23 |
## OK bash status: 126
|
24 |
|
25 |
|
26 |
# bug fix for leakage
|
27 |
env | grep _OVM
|
28 |
echo status=$?
|
29 |
## stdout: status=1
|
30 |
|
31 |
|
32 |
# most shells execute /bin/sh; bash may execute itself
|
33 |
echo 'echo hi' > $TMP/no-shebang
|
34 |
chmod +x $TMP/no-shebang
|
35 |
$SH -c '$TMP/no-shebang'
|
36 |
## stdout: hi
|
37 |
## status: 0
|
38 |
|
39 |
|
40 |
cd $TMP
|
41 |
echo 'echo hi' > no-shebang
|
42 |
chmod +x no-shebang
|
43 |
"$SH" -c './no-shebang'
|
44 |
## stdout: hi
|
45 |
## status: 0
|
46 |
|
47 |
|
48 |
cd $TMP
|
49 |
mkdir -p test-no-shebang
|
50 |
echo 'echo hi' > test-no-shebang/script
|
51 |
chmod +x test-no-shebang/script
|
52 |
"$SH" -c 'test-no-shebang/script'
|
53 |
## stdout: hi
|
54 |
## status: 0
|
55 |
|
56 |
|
57 |
cd $TMP
|
58 |
mkdir -p one two
|
59 |
echo 'echo one' > one/mycmd
|
60 |
echo 'echo two' > two/mycmd
|
61 |
chmod +x one/mycmd two/mycmd
|
62 |
|
63 |
PATH='one:two'
|
64 |
mycmd
|
65 |
## STDOUT:
|
66 |
one
|
67 |
## END
|
68 |
|
69 |
|
70 |
cd $TMP
|
71 |
PATH="one:two:$PATH"
|
72 |
mkdir -p one two
|
73 |
rm -f one/* two/*
|
74 |
echo 'echo two' > two/mycmd
|
75 |
chmod +x two/mycmd
|
76 |
mycmd
|
77 |
|
78 |
# Insert earlier in the path
|
79 |
echo 'echo one' > one/mycmd
|
80 |
chmod +x one/mycmd
|
81 |
mycmd # still runs the cached 'two'
|
82 |
|
83 |
# clear the cache
|
84 |
hash -r
|
85 |
mycmd # now it runs the new 'one'
|
86 |
|
87 |
## STDOUT:
|
88 |
two
|
89 |
two
|
90 |
one
|
91 |
## END
|
92 |
|
93 |
# zsh doesn't do caching!
|
94 |
## OK zsh STDOUT:
|
95 |
two
|
96 |
one
|
97 |
one
|
98 |
## END
|
99 |
|
100 |
|
101 |
cd $TMP
|
102 |
PATH="one:two:$PATH"
|
103 |
mkdir -p one two
|
104 |
rm -f one/mycmd two/mycmd
|
105 |
|
106 |
echo 'echo two' > two/mycmd
|
107 |
chmod +x two/mycmd
|
108 |
mycmd
|
109 |
echo status=$?
|
110 |
|
111 |
# Insert earlier in the path
|
112 |
echo 'echo one' > one/mycmd
|
113 |
chmod +x one/mycmd
|
114 |
rm two/mycmd
|
115 |
mycmd # still runs the cached 'two'
|
116 |
echo status=$?
|
117 |
|
118 |
## STDOUT:
|
119 |
two
|
120 |
status=0
|
121 |
status=127
|
122 |
## END
|
123 |
|
124 |
# mksh and zsh correctly searches for the executable again!
|
125 |
## OK zsh/mksh STDOUT:
|
126 |
two
|
127 |
status=0
|
128 |
one
|
129 |
status=0
|
130 |
## END
|
131 |
|
132 |
|
133 |
|
134 |
# shells differ in whether they actually execve('one/cmd') and get EPERM
|
135 |
|
136 |
mkdir -p one two
|
137 |
PATH="one:two:$PATH"
|
138 |
|
139 |
rm -f one/mycmd two/mycmd
|
140 |
echo 'echo one' > one/mycmd
|
141 |
echo 'echo two' > two/mycmd
|
142 |
|
143 |
# only make the second one executable
|
144 |
chmod +x two/mycmd
|
145 |
mycmd
|
146 |
echo status=$?
|
147 |
|
148 |
## STDOUT:
|
149 |
two
|
150 |
status=0
|
151 |
## END
|
152 |
|
153 |
|
154 |
whoami >/dev/null
|
155 |
hash
|
156 |
echo status=$?
|
157 |
## STDOUT:
|
158 |
/usr/bin/whoami
|
159 |
status=0
|
160 |
## END
|
161 |
|
162 |
# bash uses a weird table. Although we could use TSV2.
|
163 |
## OK bash stdout-json: "hits\tcommand\n 1\t/usr/bin/whoami\nstatus=0\n"
|
164 |
|
165 |
## OK mksh/zsh STDOUT:
|
166 |
whoami=/usr/bin/whoami
|
167 |
status=0
|
168 |
## END
|
169 |
|
170 |
|
171 |
hash whoami
|
172 |
echo status=$?
|
173 |
hash | grep -o /whoami # prints it twice
|
174 |
hash _nonexistent_
|
175 |
echo status=$?
|
176 |
## STDOUT:
|
177 |
status=0
|
178 |
/whoami
|
179 |
status=1
|
180 |
## END
|
181 |
|
182 |
# mksh doesn't fail
|
183 |
## BUG mksh STDOUT:
|
184 |
status=0
|
185 |
/whoami
|
186 |
status=0
|
187 |
## END
|
188 |
|
189 |
|
190 |
hash -r whoami >/dev/null # avoid weird output with mksh
|
191 |
echo status=$?
|
192 |
## stdout: status=1
|
193 |
## OK osh stdout: status=2
|
194 |
## BUG dash/bash stdout: status=0
|