1 ## oils_failures_allowed: 0
2 ## compare_shells: bash
3
4 #### type -t -> function
5 f() { echo hi; }
6 type -t f
7 ## stdout: function
8
9 #### type -t -> alias
10 shopt -s expand_aliases
11 alias foo=bar
12 type -t foo
13 ## stdout: alias
14
15 #### type -t -> builtin
16 type -t echo read : [ declare local
17 ## STDOUT:
18 builtin
19 builtin
20 builtin
21 builtin
22 builtin
23 builtin
24 ## END
25
26 #### type -t -> keyword
27 type -t for time ! fi do {
28 ## STDOUT:
29 keyword
30 keyword
31 keyword
32 keyword
33 keyword
34 keyword
35 ## END
36
37 #### type -t control flow
38
39 # this differs from bash, but don't lie!
40 type -t break continue return exit
41 ## STDOUT:
42 keyword
43 keyword
44 keyword
45 keyword
46 ## END
47 ## OK bash STDOUT:
48 builtin
49 builtin
50 builtin
51 builtin
52 ## END
53
54
55 #### type -t -> file
56 type -t find xargs
57 ## STDOUT:
58 file
59 file
60 ## END
61
62 #### type -t doesn't find non-executable (like command -v)
63 PATH="$TMP:$PATH"
64 touch $TMP/non-executable
65 type -t non-executable
66 ## STDOUT:
67 ## END
68 ## status: 1
69 ## BUG bash STDOUT:
70 file
71 ## END
72 ## BUG bash status: 0
73
74 #### type -t -> not found
75 type -t echo ZZZ find ==
76 echo status=$?
77 ## STDOUT:
78 builtin
79 file
80 status=1
81 ## END
82 ## STDERR:
83 ## END
84
85 #### type -p and -P builtin -> file
86 touch /tmp/{mv,tar,grep}
87 chmod +x /tmp/{mv,tar,grep}
88 PATH=/tmp:$PATH
89
90 type -p mv tar grep
91 echo --
92 type -P mv tar grep
93 ## STDOUT:
94 /tmp/mv
95 /tmp/tar
96 /tmp/grep
97 --
98 /tmp/mv
99 /tmp/tar
100 /tmp/grep
101 ## END
102
103 #### type -a -P gives multiple files
104
105 touch _tmp/pwd
106 chmod +x _tmp/pwd
107 PATH="_tmp:/bin"
108
109 type -a -P pwd
110
111 ## STDOUT:
112 _tmp/pwd
113 /bin/pwd
114 ## END
115
116 #### type -p builtin -> not found
117 type -p FOO BAR NOT_FOUND
118 ## status: 1
119 ## STDOUT:
120 ## END
121
122 #### type -p builtin -> not a file
123 type -p cd type builtin command
124 ## STDOUT:
125 ## END
126
127 #### type -P builtin -> not found
128 type -P FOO BAR NOT_FOUND
129 ## status: 1
130 ## STDOUT:
131 ## END
132
133 #### type -P builtin -> not a file
134 type -P cd type builtin command
135 ## status: 1
136 ## STDOUT:
137 ## END
138
139 #### type -P builtin -> not a file but file found
140 touch _tmp/{mv,tar,grep}
141 chmod +x _tmp/{mv,tar,grep}
142 PATH=_tmp:$PATH
143
144 mv () { ls; }
145 tar () { ls; }
146 grep () { ls; }
147 type -P mv tar grep cd builtin command type
148 ## status: 1
149 ## STDOUT:
150 _tmp/mv
151 _tmp/tar
152 _tmp/grep
153 ## END
154
155 #### type -f builtin -> not found
156 type -f FOO BAR NOT FOUND
157 ## status: 1
158
159 #### type -f builtin -> function and file exists
160 touch /tmp/{mv,tar,grep}
161 chmod +x /tmp/{mv,tar,grep}
162 PATH=/tmp:$PATH
163
164 mv () { ls; }
165 tar () { ls; }
166 grep () { ls; }
167 type -f mv tar grep
168 ## STDOUT:
169 mv is /tmp/mv
170 tar is /tmp/tar
171 grep is /tmp/grep
172 ## END
173
174 #### type -a -> function; prints shell source code
175 f () { :; }
176 type -a f
177 ## STDOUT:
178 f is a function
179 f ()
180 {
181 :
182 }
183 ## END
184 ## OK osh STDOUT:
185 f is a shell function
186 ## END
187
188 #### type -ap -> function
189 f () { :; }
190 type -ap f
191 ## STDOUT:
192 ## END
193
194 #### type -a -> alias; prints alias definition
195 shopt -s expand_aliases
196 alias ll="ls -lha"
197 type -a ll
198 ## stdout: ll is an alias for "ls -lha"
199 ## OK bash stdout: ll is aliased to `ls -lha'
200
201 #### type -ap -> alias
202 shopt -s expand_aliases
203 alias ll="ls -lha"
204 type -ap ll
205 ## STDOUT:
206 ## END
207
208 #### type -a -> builtin
209 type -a cd
210 ## stdout: cd is a shell builtin
211
212 #### type -ap -> builtin
213 type -ap cd
214 ## STDOUT:
215 ## END
216
217 #### type -a -> keyword
218 type -a while
219 ## stdout: while is a shell keyword
220
221 #### type -a -> file
222 touch _tmp/date
223 chmod +x _tmp/date
224 PATH=/bin:_tmp # control output
225
226 type -a date
227
228 ## STDOUT:
229 date is /bin/date
230 date is _tmp/date
231 ## END
232
233 #### type -ap -> file; abbreviated
234 touch _tmp/date
235 chmod +x _tmp/date
236 PATH=/bin:_tmp # control output
237
238 type -ap date
239 ## STDOUT:
240 /bin/date
241 _tmp/date
242 ## END
243
244 #### type -a -> builtin and file
245 touch _tmp/pwd
246 chmod +x _tmp/pwd
247 PATH=/bin:_tmp # control output
248
249 type -a pwd
250 ## STDOUT:
251 pwd is a shell builtin
252 pwd is /bin/pwd
253 pwd is _tmp/pwd
254 ## END
255
256 #### type -a -> builtin and file and shell function
257 touch _tmp/pwd
258 chmod +x _tmp/pwd
259 PATH=/bin:_tmp # control output
260
261 type -a pwd
262 echo ---
263
264 pwd() { echo function-too; }
265 type -a pwd
266 echo ---
267
268 type -a -f pwd
269
270 ## STDOUT:
271 pwd is a shell builtin
272 pwd is /bin/pwd
273 pwd is _tmp/pwd
274 ---
275 pwd is a function
276 pwd ()
277 {
278 echo function-too
279 }
280 pwd is a shell builtin
281 pwd is /bin/pwd
282 pwd is _tmp/pwd
283 ---
284 pwd is a shell builtin
285 pwd is /bin/pwd
286 pwd is _tmp/pwd
287 ## END
288 ## OK osh STDOUT:
289 pwd is a shell builtin
290 pwd is /bin/pwd
291 pwd is _tmp/pwd
292 ---
293 pwd is a shell function
294 pwd is a shell builtin
295 pwd is /bin/pwd
296 pwd is _tmp/pwd
297 ---
298 pwd is a shell builtin
299 pwd is /bin/pwd
300 pwd is _tmp/pwd
301 ## END
302
303 #### type -ap -> builtin and file; doesn't print builtin or function
304 touch _tmp/pwd
305 chmod +x _tmp/pwd
306 PATH=/bin:_tmp # control output
307
308 # Function is also ignored
309 pwd() { echo function-too; }
310
311 type -ap pwd
312 echo ---
313
314 type -p pwd
315
316 ## STDOUT:
317 /bin/pwd
318 _tmp/pwd
319 ---
320 ## END
321
322 #### type -a -> executable not in PATH
323 touch _tmp/executable
324 chmod +x _tmp/executable
325 type -a executable
326 ## status: 1