1 ## compare_shells: bash
2 ## oils_failures_allowed: 3
3
4 #### invoke usage
5 case $SH in bash) exit ;; esac
6
7 invoke
8 echo status=$?
9
10 invoke --
11 echo status=$?
12
13 echo
14
15 invoke sleep 0
16 echo status=$?
17
18 invoke -- sleep 0
19 echo status=$?
20
21 invoke --builtin -- sleep 0
22 echo status=$?
23
24 ## STDOUT:
25 status=2
26 status=2
27
28 status=0
29 status=0
30 status=0
31 ## END
32 ## N-I bash STDOUT:
33 ## END
34
35 #### invoke nonexistent name
36 case $SH in bash) exit ;; esac
37
38 invoke zz
39 echo status=$?
40
41 invoke --builtin zz
42 echo status=$?
43
44 invoke --builtin -- zz
45 echo status=$?
46
47 ## STDOUT:
48 status=1
49 status=1
50 status=1
51 ## END
52 ## N-I bash STDOUT:
53 ## END
54
55 #### type and command builtin does not find private sleep, because it's not enabled
56
57 # Does Oils have __builtins__.special __builtins__.normal __builtins__.private
58 # perhaps? That is another way of introspecting
59
60 remove-path() { sed 's;/.*/;;'; }
61
62 type -t sleep
63 type sleep | remove-path
64 echo
65
66 command -v sleep | remove-path
67
68 ## STDOUT:
69 file
70 sleep is sleep
71
72 sleep
73 ## END
74
75 #### type -a does not find private builtins
76
77 remove-path() { sed 's;/.*/;;'; }
78
79 # this is meant to find the "first word"
80 type -a sleep | remove-path | uniq
81
82 ## STDOUT:
83 sleep is sleep
84 ## END
85
86 #### but invoke --show finds the private builtin (alternative to type, command)
87 case $SH in bash) exit ;; esac
88
89 invoke --show sleep | grep builtin
90
91 ## stdout-json: "sleep\tbuiltin\tp\n"
92
93 ## N-I bash STDOUT:
94 ## END
95
96 #### invoke --show with many types
97 case $SH in bash) exit ;; esac
98
99 my-name() { echo sh-func; }
100
101 alias my-name='echo my-alias'
102
103 # Why isn't this showing up?
104 # manual bug: I get 2 argv?
105
106 mkdir -p dir
107 echo 'echo hi' > dir/my-name
108 chmod +x dir/my-name
109 PATH=$PWD/dir:$PATH
110 #echo $PATH
111
112 command -v my-name
113 type -a my-name
114
115 shopt --set ysh:all
116
117 proc my-name { echo proc }
118
119 invoke --show my-name eval cd
120
121 ## STDOUT:
122 ## END
123
124 ## N-I bash STDOUT:
125 ## END
126
127
128 #### invoke --show does proper quoting
129 case $SH in bash) exit ;; esac
130
131 alias $'bad-alias=echo \xff\necho z'
132
133 bad-alias | od -A n -t x1
134
135 # The tabs are a bit annoying to work with ...
136 # Maybe #.ssv8 instead of #.tsv8 ?
137 invoke --show bad-alias
138
139 #alias $'bad=hi\xffname=echo hi'
140 #$'bad\xffname'
141
142 ## STDOUT:
143 ff 0a 7a 0a
144 bad-alias alias b'echo \yff\necho z'
145 ## END
146
147 ## N-I bash STDOUT:
148 ## END
149
150 #### builtin sleep behaves like external sleep
151 case $SH in
152 *osh) prefix='builtin' ;;
153 *) prefix='' ;;
154 esac
155
156 $prefix sleep
157 if test "$?" != 0; then
158 echo ok
159 fi
160
161 # This is different! OSH is stricter
162 if false; then
163 $prefix sleep --
164 if test "$?" != 0; then
165 echo ok
166 fi
167 fi
168
169 $prefix sleep -2
170 if test "$?" != 0; then
171 echo ok
172 fi
173
174 $prefix sleep -- -2
175 if test "$?" != 0; then
176 echo ok
177 fi
178
179 $prefix sleep zz
180 if test "$?" != 0; then
181 echo ok
182 fi
183
184 $prefix sleep 0
185 echo status=$?
186
187 $prefix sleep -- 0
188 echo status=$?
189
190 $prefix sleep '0.0005'
191 echo status=$?
192
193 $prefix sleep '+0.0005'
194 echo status=$?
195
196 ## STDOUT:
197 ok
198 ok
199 ok
200 ok
201 status=0
202 status=0
203 status=0
204 status=0
205 ## END
206
207 #### builtin sleep usage errors
208 case $SH in bash) exit ;; esac
209
210 builtin sleep 0.5s
211 echo status=$?
212
213 builtin sleep 0.1 extra
214 echo status=$?
215
216 ## STDOUT:
217 status=2
218 status=2
219 ## END
220 ## N-I bash STDOUT:
221 ## END
222
223 #### sleep without prefix is still external
224
225 # should not work
226 builtin sleep --version
227 if test "$?" != '0'; then
228 echo ok
229 fi
230
231 sleep --version | head -n 1 >& 2
232 echo status=$?
233
234 ## STDOUT:
235 ok
236 status=0
237 ## END
238
239 #### builtin cat
240 case $SH in bash) exit ;; esac
241
242 seq 3 | builtin cat
243
244 ## STDOUT:
245 1
246 2
247 3
248 ## END
249 ## N-I bash STDOUT:
250 ## END
251
252
253 #### builtin readlink
254 case $SH in bash) exit ;; esac
255
256 echo TODO
257
258 # turn this into a builtin
259 # does that mean any builtin can be externalized?
260 # - [ aka test is a good candiate
261 # - we have stubs from true/false
262
263 ## STDOUT:
264 ## END
265
266 ## N-I bash STDOUT:
267 ## END