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 runs PROMPT_COMMAND after each command
53 export PS1='' # OSH prints prompt to stdout
54
55 case $SH in
56 *bash|*osh)
57 $SH --rcfile /dev/null -i << EOF
58 PROMPT_COMMAND='echo PROMPT'
59 echo one
60 echo two
61 EOF
62 ;;
63 esac
64
65 # Paper over difference with OSH
66 case $SH in *bash) echo '^D';; esac
67
68 ## STDOUT:
69 PROMPT
70 one
71 PROMPT
72 two
73 PROMPT
74 ^D
75 ## END
76 ## N-I dash/mksh stdout-json: ""
77
78
79 #### parse error in PROMPT_COMMAND
80 export PS1='' # OSH prints prompt to stdout
81
82 case $SH in
83 *bash|*osh)
84 $SH --rcfile /dev/null -i << EOF
85 PROMPT_COMMAND=';'
86 echo one
87 echo two
88 EOF
89 ;;
90 esac
91
92 # Paper over difference with OSH
93 case $SH in *bash) echo '^D';; esac
94
95 ## STDOUT:
96 one
97 two
98 ^D
99 ## END
100 ## N-I dash/mksh stdout-json: ""
101
102 #### runtime error in PROMPT_COMMAND
103 export PS1='' # OSH prints prompt to stdout
104
105 case $SH in
106 *bash|*osh)
107 $SH --rcfile /dev/null -i << 'EOF'
108 PROMPT_COMMAND='echo PROMPT $(( 1 / 0 ))'
109 echo one
110 echo two
111 EOF
112 ;;
113 esac
114
115 # Paper over difference with OSH
116 case $SH in *bash) echo '^D';; esac
117
118 ## STDOUT:
119 one
120 two
121 ^D
122 ## END
123 ## N-I dash/mksh stdout-json: ""
124
125 #### Error message with bad oshrc file (currently ignored)
126 cd $TMP
127 echo 'foo >' > bad_oshrc
128
129 $SH --rcfile bad_oshrc -i -c 'echo hi' 2>stderr.txt
130 echo status=$?
131
132 # bash prints two lines
133 grep --max-count 1 -o 'bad_oshrc:' stderr.txt
134
135 ## STDOUT:
136 hi
137 status=0
138 bad_oshrc:
139 ## END
140
141 ## N-I dash/mksh status: 1
142 ## N-I dash STDOUT:
143 status=2
144 ## END
145 ## N-I mksh STDOUT:
146 status=1
147 ## END
148
149 #### PROMPT_COMMAND can see $?, like bash
150
151 # bug fix #853
152
153 case $SH in (dash|mksh) exit ;; esac
154
155 export PS1='' # OSH prints prompt to stdout
156
157 case $SH in
158 *bash|*osh)
159 $SH --rcfile /dev/null -i << 'EOF'
160 myfunc() { echo last_status=$?; }
161 PROMPT_COMMAND='myfunc'
162 ( exit 42 )
163 ( exit 43 )
164 echo ok
165 EOF
166 ;;
167 esac
168
169 # Paper over difference with OSH
170 case $SH in *bash) echo '^D';; esac
171 ## STDOUT:
172 last_status=0
173 last_status=42
174 last_status=43
175 ok
176 last_status=0
177 ^D
178 ## END
179 ## N-I dash/mksh stdout-json: ""
180
181 #### PROMPT_COMMAND that writes to BASH_REMATCH
182 export PS1=''
183
184 case $SH in
185 *bash|*osh)
186 $SH --rcfile /dev/null -i << 'EOF'
187 PROMPT_COMMAND='[[ clobber =~ (.)(.)(.) ]]; echo ---'
188 echo one
189 [[ bar =~ (.)(.)(.) ]]
190 echo ${BASH_REMATCH[@]}
191 EOF
192 ;;
193 esac
194
195 # Paper over difference with OSH
196 case $SH in *bash) echo '^D';; esac
197
198 ## STDOUT:
199 ---
200 one
201 ---
202 ---
203 bar b a r
204 ---
205 ^D
206 ## END
207 ## OK bash STDOUT:
208 ---
209 one
210 ---
211 ---
212 clo c l o
213 ---
214 ^D
215 ## END
216 ## N-I dash/mksh stdout-json: ""