1 ## compare_shells: dash bash mksh
2 ## legacy_tmp_dir: yes
3
4 # Some nonsensical combinations which can all be detected at PARSE TIME.
5 # All shells allow these, but right now OSH disallowed.
6 # TODO: Run the parser on your whole corpus, and then if there are no errors,
7 # you should make OSH the OK behavior, and others are OK.
8
9 #### Prefix env on assignment
10 f() {
11 # NOTE: local treated like a special builtin!
12 E=env local v=var
13 echo $E $v
14 }
15 f
16 ## status: 0
17 ## stdout: env var
18 ## OK bash stdout: var
19
20 #### Redirect on assignment (enabled 7/2019)
21 f() {
22 # NOTE: local treated like a special builtin!
23 local E=env > _tmp/r.txt
24 }
25 rm -f _tmp/r.txt
26 f
27 test -f _tmp/r.txt && echo REDIRECTED
28 ## status: 0
29 ## stdout: REDIRECTED
30
31 #### Prefix env on control flow
32 for x in a b c; do
33 echo $x
34 E=env break
35 done
36 ## status: 0
37 ## stdout: a
38 ## OK osh status: 2
39 ## OK osh stdout-json: ""
40
41 #### Redirect on control flow (ignored in OSH)
42 rm -f _tmp/r.txt
43 for x in a b c; do
44 break > _tmp/r.txt
45 done
46 if test -f _tmp/r.txt; then
47 echo REDIRECTED
48 else
49 echo NO
50 fi
51 ## status: 0
52 ## stdout: REDIRECTED
53 ## OK osh stdout: NO
54
55 #### Redirect on control flow with oil:all (parse_ignored)
56 shopt -s oil:all
57 rm -f _tmp/r.txt
58 for x in a b c; do
59 break > _tmp/r.txt
60 done
61 test -f _tmp/r.txt && echo REDIRECTED
62 ## status: 0
63 ## stdout: REDIRECTED
64 ## OK osh status: 2
65 ## OK osh stdout-json: ""