| 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 |