1 #
2
3 #### 'exit' in oshrc (regression)
4 cat >$TMP/oshrc <<EOF
5 echo one
6 exit 42
7 echo two
8 EOF
9 $SH --rcfile $TMP/oshrc -i -c 'echo hello'
10 ## status: 42
11 ## STDOUT:
12 one
13 ## END
14 ## N-I dash status: 2
15 ## N-I dash stdout-json: ""
16 ## N-I mksh status: 1
17 ## N-I mksh stdout-json: ""
18
19 #### fatal errors continue
20 # NOTE: tried here doc, but sys.stdin.isatty() fails. Could we fake it?
21 $SH --rcfile /dev/null -i -c '
22 echo $(( 1 / 0 ))
23 echo one
24 exit 42
25 '
26 ## status: 42
27 ## STDOUT:
28 one
29 ## END
30 ## N-I dash status: 2
31 ## N-I dash stdout-json: ""
32 ## N-I mksh status: 1
33 ## N-I mksh stdout-json: ""
34
35 #### interactive shell loads rcfile (when combined with -c)
36 $SH -c 'echo 1'
37 cat >$TMP/rcfile <<EOF
38 echo RCFILE
39 EOF
40 $SH --rcfile $TMP/rcfile -i -c 'echo 2'
41 ## STDOUT:
42 1
43 RCFILE
44 2
45 ## END
46 ## N-I dash/mksh STDOUT:
47 1
48 ## END
49 ## N-I dash status: 2
50 ## N-I mksh status: 1
51
52 #### interactive shell loads files in rcdir (when combined with -c)
53 case $SH in dash|bash|mksh) exit ;; esac
54
55 $SH -c 'echo A'
56
57 cat >$TMP/rcfile <<EOF
58 echo 'rcfile first'
59 EOF
60
61 mkdir -p $TMP/rcdir
62
63 cat >$TMP/rcdir/file1 <<EOF
64 echo rcdir 1
65 EOF
66
67 cat >$TMP/rcdir/file2 <<EOF
68 echo rcdir 2
69 EOF
70
71 # --rcdir only
72 $SH --rcdir $TMP/rcdir -i -c 'echo B'
73
74 $SH --rcfile $TMP/rcfile --rcdir $TMP/rcdir -i -c 'echo C'
75
76 ## STDOUT:
77 A
78 rcdir 1
79 rcdir 2
80 B
81 rcfile first
82 rcdir 1
83 rcdir 2
84 C
85 ## END
86 ## N-I dash/mksh/bash STDOUT:
87 ## END
88
89 #### nonexistent --rcdir is ignored
90 case $SH in dash|bash|mksh) exit ;; esac
91
92 $SH --rcdir $TMP/__does-not-exist -i -c 'echo hi'
93 echo status=$?
94
95 ## STDOUT:
96 hi
97 status=0
98 ## END
99 ## N-I dash/bash/mksh STDOUT:
100 ## END
101
102 #### shell doesn't load rcfile/rcdir if --norc is given
103 case $SH in dash|mksh) exit ;; esac
104
105 $SH -c 'echo A'
106
107 cat >$TMP/rcfile <<EOF
108 echo rcfile
109 EOF
110
111 mkdir -p $TMP/rcdir
112 cat >$TMP/rcdir/file1 <<EOF
113 echo rcdir 1
114 EOF
115
116 cat >$TMP/rcdir/file2 <<EOF
117 echo rcdir 2
118 EOF
119
120 $SH --norc --rcfile $TMP/rcfile -c 'echo C'
121 case $SH in bash) exit ;; esac
122
123 $SH --norc --rcfile $TMP/rcfile --rcdir $TMP/rcdir -c 'echo D'
124
125 ## STDOUT:
126 A
127 C
128 D
129 ## END
130 ## OK bash STDOUT:
131 A
132 C
133 ## END
134 ## N-I dash/mksh STDOUT:
135 ## END
136
137
138 #### interactive shell runs PROMPT_COMMAND after each command
139 export PS1='' # OSH prints prompt to stdout
140
141 case $SH in
142 *bash|*osh)
143 $SH --rcfile /dev/null -i << EOF
144 PROMPT_COMMAND='echo PROMPT'
145 echo one
146 echo two
147 EOF
148 ;;
149 esac
150
151 # Paper over difference with OSH
152 case $SH in *bash) echo '^D';; esac
153
154 ## STDOUT:
155 PROMPT
156 one
157 PROMPT
158 two
159 PROMPT
160 ^D
161 ## END
162 ## N-I dash/mksh stdout-json: ""
163
164
165 #### parse error in PROMPT_COMMAND
166 export PS1='' # OSH prints prompt to stdout
167
168 case $SH in
169 *bash|*osh)
170 $SH --rcfile /dev/null -i << EOF
171 PROMPT_COMMAND=';'
172 echo one
173 echo two
174 EOF
175 ;;
176 esac
177
178 # Paper over difference with OSH
179 case $SH in *bash) echo '^D';; esac
180
181 ## STDOUT:
182 one
183 two
184 ^D
185 ## END
186 ## N-I dash/mksh stdout-json: ""
187
188 #### runtime error in PROMPT_COMMAND
189 export PS1='' # OSH prints prompt to stdout
190
191 case $SH in
192 *bash|*osh)
193 $SH --rcfile /dev/null -i << 'EOF'
194 PROMPT_COMMAND='echo PROMPT $(( 1 / 0 ))'
195 echo one
196 echo two
197 EOF
198 ;;
199 esac
200
201 # Paper over difference with OSH
202 case $SH in *bash) echo '^D';; esac
203
204 ## STDOUT:
205 one
206 two
207 ^D
208 ## END
209 ## N-I dash/mksh stdout-json: ""
210
211 #### Error message with bad oshrc file (currently ignored)
212 cd $TMP
213 echo 'foo >' > bad_oshrc
214
215 $SH --rcfile bad_oshrc -i -c 'echo hi' 2>stderr.txt
216 echo status=$?
217
218 # bash prints two lines
219 grep --max-count 1 -o 'bad_oshrc:' stderr.txt
220
221 ## STDOUT:
222 hi
223 status=0
224 bad_oshrc:
225 ## END
226
227 ## N-I dash/mksh status: 1
228 ## N-I dash STDOUT:
229 status=2
230 ## END
231 ## N-I mksh STDOUT:
232 status=1
233 ## END
234
235 #### PROMPT_COMMAND can see $?, like bash
236
237 # bug fix #853
238
239 case $SH in (dash|mksh) exit ;; esac
240
241 export PS1='' # OSH prints prompt to stdout
242
243 case $SH in
244 *bash|*osh)
245 $SH --rcfile /dev/null -i << 'EOF'
246 myfunc() { echo last_status=$?; }
247 PROMPT_COMMAND='myfunc'
248 ( exit 42 )
249 ( exit 43 )
250 echo ok
251 EOF
252 ;;
253 esac
254
255 # Paper over difference with OSH
256 case $SH in *bash) echo '^D';; esac
257 ## STDOUT:
258 last_status=0
259 last_status=42
260 last_status=43
261 ok
262 last_status=0
263 ^D
264 ## END
265 ## N-I dash/mksh stdout-json: ""
266
267 #### PROMPT_COMMAND that writes to BASH_REMATCH
268 export PS1=''
269
270 case $SH in
271 *bash|*osh)
272 $SH --rcfile /dev/null -i << 'EOF'
273 PROMPT_COMMAND='[[ clobber =~ (.)(.)(.) ]]; echo ---'
274 echo one
275 [[ bar =~ (.)(.)(.) ]]
276 echo ${BASH_REMATCH[@]}
277 EOF
278 ;;
279 esac
280
281 # Paper over difference with OSH
282 case $SH in *bash) echo '^D';; esac
283
284 ## STDOUT:
285 ---
286 one
287 ---
288 ---
289 bar b a r
290 ---
291 ^D
292 ## END
293 ## OK bash STDOUT:
294 ---
295 one
296 ---
297 ---
298 clo c l o
299 ---
300 ^D
301 ## END
302 ## N-I dash/mksh stdout-json: ""