Permalink
Please sign in to comment.
Browse files
Fix 'unset R' where R is readonly.
OSH was too strict, and it caused the Aboriginal run to fail, because it tries to 'unset SHELLOPTS'. We have to rely on 'errexit' for a lot of strictness. Also: - add 2 shells snippets that OSH should fail on but doesn't. - strict-options.test.sh uses the new spec test format.
- Loading branch information...
Showing
with
70 additions
and 29 deletions.
- +8 −2 core/builtin.py
- +8 −4 core/state.py
- +3 −4 spec/builtin-vars.test.sh
- +13 −0 spec/parse-errors.test.sh
- +37 −18 spec/strict-options.test.sh
- +1 −1 test/spec.sh
| @@ -1,46 +1,65 @@ | ||
| #!/usr/bin/env bash | ||
| ### Sourcing a script that returns is allowed no matter what | ||
| ### Sourcing a script that returns at the top level | ||
| echo one | ||
| . spec/testdata/return-helper.sh | ||
| echo $? | ||
| echo two | ||
| # stdout-json: "one\nreturn-helper.sh\n42\ntwo\n" | ||
| ## STDOUT: | ||
| one | ||
| return-helper.sh | ||
| 42 | ||
| two | ||
| ## END | ||
| ### top level control flow | ||
| $SH spec/testdata/top-level-control-flow.sh | ||
| # stdout-json: "SUBSHELL\nBREAK\nCONTINUE\nRETURN\n" | ||
| # OK bash stdout-json: "SUBSHELL\nBREAK\nCONTINUE\nRETURN\nDONE\n" | ||
| # status: 0 | ||
| ## status: 0 | ||
| ## STDOUT: | ||
| SUBSHELL | ||
| BREAK | ||
| CONTINUE | ||
| RETURN | ||
| ## OK bash STDOUT: | ||
| SUBSHELL | ||
| BREAK | ||
| CONTINUE | ||
| RETURN | ||
| DONE | ||
| ## END | ||
| ### errexit and top-level control flow | ||
| $SH -o errexit spec/testdata/top-level-control-flow.sh | ||
| # stdout-json: "SUBSHELL\n" | ||
| # status: 2 | ||
| # OK bash status: 1 | ||
| ## status: 2 | ||
| ## OK bash status: 1 | ||
| ## STDOUT: | ||
| SUBSHELL | ||
| ## END | ||
| ### set -o strict-control-flow | ||
| $SH -o strict-control-flow -c 'echo break; break; echo hi' | ||
| # stdout: break | ||
| # status: 1 | ||
| # N-I dash/bash status: 2 | ||
| # N-I dash/bash stdout-json: "" | ||
| # N-I mksh status: 1 | ||
| # N-I mksh stdout-json: "" | ||
| ## stdout: break | ||
| ## status: 1 | ||
| ## N-I dash/bash status: 2 | ||
| ## N-I dash/bash stdout-json: "" | ||
| ## N-I mksh status: 1 | ||
| ## N-I mksh stdout-json: "" | ||
| ### return at top level is an error | ||
| return | ||
| echo "status=$?" | ||
| # stdout-json: "" | ||
| # OK bash stdout-json: "status=1\n" | ||
| ## stdout-json: "" | ||
| ## OK bash STDOUT: | ||
| status=1 | ||
| ## END | ||
| ### continue at top level is NOT an error | ||
| # NOTE: bash and mksh both print warnings, but don't exit with an error. | ||
| continue | ||
| echo status=$? | ||
| # stdout: status=0 | ||
| ## stdout: status=0 | ||
| ### break at top level is NOT an error | ||
| break | ||
| echo status=$? | ||
| # stdout: status=0 | ||
| ## stdout: status=0 |
0 comments on commit
f9a5986