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