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