| case | dash | bash | mksh | osh | osh_ALT | description |
| 0 | pass | pass | pass | pass | pass | Bad var sub |
| 1 | pass | ok | ok | pass | pass | Bad braced var sub -- not allowed |
| details | details | |||||
| 2 | BUG | BUG | BUG | pass | pass | Bad var sub caught at parse time |
| details | details | details | ||||
| 3 | pass | pass | ok | pass | pass | Incomplete while |
| details | ||||||
| 4 | pass | pass | ok | FAIL | FAIL | Incomplete for |
| details | details | details | ||||
| 5 | pass | pass | ok | pass | pass | Incomplete if |
| details | ||||||
| 6 | pass | pass | ok | FAIL | FAIL | do unexpected |
| details | details | details | ||||
| 7 | pass | pass | ok | pass | pass | } is a parse error |
| details | ||||||
| 8 | BUG | pass | ok | FAIL | FAIL | { is its own word, needs a space |
| details | details | details | details | |||
| 9 | pass | pass | pass | pass | pass | } on the second line |
| 10 | pass | BUG | ok | pass | pass | Invalid for loop variable name |
| details | details | |||||
| 11 | pass | pass | pass | pass | pass | bad var name globally isn't parsed like an assignment |
| 12 | pass | ok | ok | FAIL | FAIL | bad var name in export |
| details | details | details | details | |||
| 13 | BUG | BUG | BUG | pass | pass | bad var name in local |
| details | details | details |
43 passed, 11 ok, 0 known unimplemented, 8 known bugs, 4 failed, 0 skipped
| bash | 1 Bad braced var sub -- not allowed stdout: stderr: /bin/bash: line 1: ${%}: bad substitution
|
| mksh | 1 Bad braced var sub -- not allowed stdout: stderr: /bin/mksh: <stdin>[1]: ${%}: bad substitution
|
| dash | 2 Bad var sub caught at parse time stdout: okstderr: |
| bash | 2 Bad var sub caught at parse time stdout: okstderr: |
| mksh | 2 Bad var sub caught at parse time stdout: okstderr: |
| mksh | 3 Incomplete while stdout: stderr: /bin/mksh: <stdin>[1]: syntax error: 'while' unmatched |
| mksh | 4 Incomplete for stdout: stderr: /bin/mksh: <stdin>[1]: syntax error: 'newline' unexpected |
| osh | 4 Incomplete for [osh status] Expected 2, got 1 stdout: stderr: Traceback (most recent call last):
File "bin/osh", line 448, in <module>
main(sys.argv)
File "bin/osh", line 435, in main
sys.exit(OilMain(argv))
File "bin/osh", line 418, in OilMain
status = OshMain(main_argv)
File "bin/osh", line 327, in OshMain
node = c_parser.ParseWholeFile()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1592, in ParseWholeFile
node = self.ParseCommandTerm()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1504, in ParseCommandTerm
child = self.ParseAndOr()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1373, in ParseAndOr
left = self.ParsePipeline()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1308, in ParsePipeline
child = self.ParseCommand()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1262, in ParseCommand
node = self.ParseCompoundCommand()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1060, in ParseCompoundCommand
return self.ParseFor()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 821, in ParseFor
node = self._ParseForEachLoop()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 759, in _ParseForEachLoop
ok, iter_name, quoted = word.StaticEval(self.cur_word)
File "/home/andy/git/oil/bin/../core/word.py", line 88, in StaticEval
for part in w.parts:
AttributeError: 'TokenWord' object has no attribute 'parts'
|
| osh_ALT | 4 Incomplete for [osh_ALT status] Expected 2, got 1 stdout: stderr: Traceback (most recent call last):
File "/home/andy/git/oil/Python-2.7.13/Lib/runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/home/andy/git/oil/Python-2.7.13/Lib/runpy.py", line 72, in _run_code
exec code in run_globals
File "/home/andy/git/oil/bin/oil.py", line 448, in <module>
main(sys.argv)
File "/home/andy/git/oil/bin/oil.py", line 435, in main
sys.exit(OilMain(argv))
File "/home/andy/git/oil/bin/oil.py", line 418, in OilMain
status = OshMain(main_argv)
File "/home/andy/git/oil/bin/oil.py", line 327, in OshMain
node = c_parser.ParseWholeFile()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1592, in ParseWholeFile
node = self.ParseCommandTerm()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1504, in ParseCommandTerm
child = self.ParseAndOr()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1373, in ParseAndOr
left = self.ParsePipeline()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1308, in ParsePipeline
child = self.ParseCommand()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1262, in ParseCommand
node = self.ParseCompoundCommand()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1060, in ParseCompoundCommand
return self.ParseFor()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 821, in ParseFor
node = self._ParseForEachLoop()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 759, in _ParseForEachLoop
ok, iter_name, quoted = word.StaticEval(self.cur_word)
File "/home/andy/git/oil/bin/../core/word.py", line 88, in StaticEval
for part in w.parts:
AttributeError: 'TokenWord' object has no attribute 'parts'
|
| mksh | 5 Incomplete if stdout: stderr: /bin/mksh: <stdin>[1]: syntax error: 'if' unmatched |
| mksh | 6 do unexpected stdout: stderr: /bin/mksh: <stdin>[1]: syntax error: 'do' unexpected |
| osh | 6 do unexpected [osh status] Expected 2, got 0 stdout: stderr: |
| osh_ALT | 6 do unexpected [osh_ALT status] Expected 2, got 0 stdout: stderr: |
| mksh | 7 } is a parse error stdout: stderr: /bin/mksh: <stdin>[1]: syntax error: '}' unexpected |
| dash | 8 { is its own word, needs a space stdout: status=127stderr: /bin/dash: 1: {ls: not found
|
| mksh | 8 { is its own word, needs a space stdout: stderr: /bin/mksh: <stdin>[1]: syntax error: '}' unexpected |
| osh | 8 { is its own word, needs a space [osh status] Expected 2, got 127 stdout: stderr: Unexpected error in execvpe('{ls', ['{ls'], ...): [Errno 2] No such file or directory
|
| osh_ALT | 8 { is its own word, needs a space [osh_ALT status] Expected 2, got 127 stdout: stderr: Unexpected error in execvpe('{ls', ['{ls'], ...): [Errno 2] No such file or directory
|
| bash | 10 Invalid for loop variable name stdout: donestderr: /bin/bash: line 3: `i.j': not a valid identifier |
| mksh | 10 Invalid for loop variable name stdout: stderr: /bin/mksh: <stdin>[1]: for: bad identifier |
| bash | 12 bad var name in export stdout: stderr: /bin/bash: line 1: export: `FOO-BAR=foo': not a valid identifier |
| mksh | 12 bad var name in export stdout: stderr: /bin/mksh: <stdin>[1]: export: FOO-BAR=foo: is not an identifier |
| osh | 12 bad var name in export [osh status] Expected 2, got 0 stdout: stderr: |
| osh_ALT | 12 bad var name in export [osh_ALT status] Expected 2, got 0 stdout: stderr: |
| dash | 13 bad var name in local stdout: stderr: |
| bash | 13 bad var name in local stdout: stderr: |
| mksh | 13 bad var name in local stdout: stderr: |