1 ## compare_shells: bash
2 ## oils_failures_allowed: 1
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, but invoke --show does
76 case $SH in bash) exit ;; esac
77
78 remove-path() { sed 's;/.*/;;'; }
79
80 # this is meant to find the "first word"
81 type -a sleep | remove-path | uniq
82 echo ---
83
84 # this also shows private builtins, which are not the first word
85 invoke --show sleep | remove-path | uniq
86
87 ## STDOUT:
88 sleep is sleep
89 ---
90 sleep is sleep
91 sleep is a private shell builtin
92 ## END
93
94 ## N-I bash STDOUT:
95 ## END
96
97 #### but invoke --show finds the private builtin (alternative to type, command)
98 case $SH in bash) exit ;; esac
99
100 invoke --show sleep | grep private
101
102 ## STDOUT:
103 sleep is a private shell builtin
104 ## END
105
106 ## N-I bash STDOUT:
107 ## END
108
109 #### builtin sleep behaves like external sleep
110 case $SH in
111 *osh) prefix='builtin' ;;
112 *) prefix='' ;;
113 esac
114
115 $prefix sleep
116 if test "$?" != 0; then
117 echo ok
118 fi
119
120 # This is different! OSH is stricter
121 if false; then
122 $prefix sleep --
123 if test "$?" != 0; then
124 echo ok
125 fi
126 fi
127
128 $prefix sleep -2
129 if test "$?" != 0; then
130 echo ok
131 fi
132
133 $prefix sleep -- -2
134 if test "$?" != 0; then
135 echo ok
136 fi
137
138 $prefix sleep zz
139 if test "$?" != 0; then
140 echo ok
141 fi
142
143 $prefix sleep 0
144 echo status=$?
145
146 $prefix sleep -- 0
147 echo status=$?
148
149 $prefix sleep '0.0005'
150 echo status=$?
151
152 $prefix sleep '+0.0005'
153 echo status=$?
154
155 ## STDOUT:
156 ok
157 ok
158 ok
159 ok
160 status=0
161 status=0
162 status=0
163 status=0
164 ## END
165
166 #### builtin sleep usage errors
167 case $SH in bash) exit ;; esac
168
169 builtin sleep 0.5s
170 echo status=$?
171
172 builtin sleep 0.1 extra
173 echo status=$?
174
175 ## STDOUT:
176 status=2
177 status=2
178 ## END
179 ## N-I bash STDOUT:
180 ## END
181
182 #### sleep is still external
183
184 # should not work
185 builtin sleep --version
186 if test "$?" != '0'; then
187 echo ok
188 fi
189
190 sleep --version | head -n 1 >& 2
191 echo status=$?
192
193 ## STDOUT:
194 ok
195 status=0
196 ## END
197
198 #### cat
199 case $SH in bash) exit ;; esac
200
201 enable --internal cat
202
203 # invoke --internal cat
204 # invoke -i cat
205
206 seq 3 | __cat
207
208 ## STDOUT:
209 1
210 2
211 3
212 ## END
213 ## N-I bash STDOUT:
214 ## END
215
216
217 #### readlink
218 case $SH in bash) exit ;; esac
219
220 echo TODO
221
222 # turn this into a builtin
223 # does that mean any builtin can be externalized?
224 # - [ aka test is a good candiate
225 # - we have stubs from true/false
226
227 ## STDOUT:
228 ## END
229
230 ## N-I bash STDOUT:
231 ## END