1 #!/usr/bin/env bash
2
3 ### Sourcing a script that returns at the top level
4 echo one
5 . spec/testdata/return-helper.sh
6 echo $?
7 echo two
8 ## STDOUT:
9 one
10 return-helper.sh
11 42
12 two
13 ## END
14
15 ### top level control flow
16 $SH spec/testdata/top-level-control-flow.sh
17 ## status: 0
18 ## STDOUT:
19 SUBSHELL
20 BREAK
21 CONTINUE
22 RETURN
23 ## OK bash STDOUT:
24 SUBSHELL
25 BREAK
26 CONTINUE
27 RETURN
28 DONE
29 ## END
30
31 ### errexit and top-level control flow
32 $SH -o errexit spec/testdata/top-level-control-flow.sh
33 ## status: 2
34 ## OK bash status: 1
35 ## STDOUT:
36 SUBSHELL
37 ## END
38
39 ### set -o strict-control-flow
40 $SH -o strict-control-flow -c 'echo break; break; echo hi'
41 ## stdout: break
42 ## status: 1
43 ## N-I dash/bash status: 2
44 ## N-I dash/bash stdout-json: ""
45 ## N-I mksh status: 1
46 ## N-I mksh stdout-json: ""
47
48 ### return at top level is an error
49 return
50 echo "status=$?"
51 ## stdout-json: ""
52 ## OK bash STDOUT:
53 status=1
54 ## END
55
56 ### continue at top level is NOT an error
57 # NOTE: bash and mksh both print warnings, but don't exit with an error.
58 continue
59 echo status=$?
60 ## stdout: status=0
61
62 ### break at top level is NOT an error
63 break
64 echo status=$?
65 ## stdout: status=0