| case | dash | bash | mksh | osh | description |
| 0 | pass | ok | ok | FAIL | Bad env name: hyphen |
| details | details | details | |||
| 1 | pass | ok | ok | FAIL | Bad env name: period |
| details | details | details | |||
| 2 | pass | pass | pass | pass | Bad var sub |
| 3 | pass | ok | ok | FAIL | Bad braced var sub -- not allowed |
| details | details | details | |||
| 4 | BUG | BUG | BUG | FAIL | Bad var sub caught at parse time |
| details | details | details | details | ||
| 5 | pass | pass | pass | pass | Pipe with while |
| 6 | pass | pass | pass | pass | Length of length of ARGS! |
| 7 | pass | pass | pass | pass | Length of length of ARGS! 2 digit |
| 8 | pass | pass | pass | pass | $1 .. $9 are scoped, while $0 is not |
| 9 | pass | pass | pass | pass | Chained && and || -- || has higher precedence? |
| 10 | pass | pass | pass | pass | Pipeline comments |
| 11 | pass | pass | pass | pass | Command block |
| 12 | ok | pass | ok | FAIL | { is its own word, needs a space |
| details | details | details |
36 passed, 8 ok, 0 known unimplemented, 3 known bugs, 5 failed, 0 skipped
| bash | 0 Bad env name: hyphen stdout: stderr: /bin/bash: line 1: export: `FOO-BAR=foo': not a valid identifier |
| mksh | 0 Bad env name: hyphen stdout: stderr: /bin/mksh: <stdin>[1]: export: FOO-BAR=foo: is not an identifier |
| osh | 0 Bad env name: hyphen [osh status] Expected 2, got 0 stdout: stderr: |
| bash | 1 Bad env name: period stdout: stderr: /bin/bash: line 1: export: `FOO.BAR=foo': not a valid identifier |
| mksh | 1 Bad env name: period stdout: stderr: /bin/mksh: <stdin>[1]: export: FOO.BAR=foo: is not an identifier |
| osh | 1 Bad env name: period [osh status] Expected 2, got 0 stdout: stderr: |
| bash | 3 Bad braced var sub -- not allowed stdout: stderr: /bin/bash: line 1: ${%}: bad substitution
|
| mksh | 3 Bad braced var sub -- not allowed stdout: stderr: /bin/mksh: <stdin>[1]: ${%}: bad substitution
|
| osh | 3 Bad braced var sub -- not allowed [osh status] Expected 2, got 1 stdout: stderr: Traceback (most recent call last):
File "bin/osh", line 430, in <module>
main(sys.argv)
File "bin/osh", line 417, in main
sys.exit(OilMain(argv))
File "bin/osh", line 400, in OilMain
status = OshMain(main_argv)
File "bin/osh", line 318, in OshMain
node = c_parser.ParseWholeFile()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1559, in ParseWholeFile
node = self.ParseCommandTerm()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1467, in ParseCommandTerm
child = self.ParseAndOr()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1332, in ParseAndOr
left = self.ParsePipeline()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1268, in ParsePipeline
child = self.ParseCommand()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1250, in ParseCommand
return self.ParseSimpleCommand() # echo foo
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 547, in ParseSimpleCommand
result = self._ScanSimpleCommand()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 354, in _ScanSimpleCommand
if not self._Peek(): return None
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 151, in _Peek
w = self.w_parser.ReadWord(self.next_lex_mode)
File "/home/andy/git/oil/bin/../osh/word_parse.py", line 1107, in ReadWord
w, need_more = self._ReadWord(lex_mode)
File "/home/andy/git/oil/bin/../osh/word_parse.py", line 1068, in _ReadWord
w = self._ReadCompoundWord(lex_mode=lex_mode)
File "/home/andy/git/oil/bin/../osh/word_parse.py", line 914, in _ReadCompoundWord
part = self._ReadLeftParts()
File "/home/andy/git/oil/bin/../osh/word_parse.py", line 533, in _ReadLeftParts
return self._ReadBracedBracedVarSub(d_quoted=False)
File "/home/andy/git/oil/bin/../osh/word_parse.py", line 459, in _ReadBracedBracedVarSub
raise AssertionError(self.cur_token)
AssertionError: (token id:Unknown_Tok val:"%" span_id:3)
|
| dash | 4 Bad var sub caught at parse time stdout: okstderr: |
| bash | 4 Bad var sub caught at parse time stdout: okstderr: |
| mksh | 4 Bad var sub caught at parse time stdout: okstderr: |
| osh | 4 Bad var sub caught at parse time [osh status] Expected 2, got 1 stdout: stderr: Traceback (most recent call last):
File "bin/osh", line 430, in <module>
main(sys.argv)
File "bin/osh", line 417, in main
sys.exit(OilMain(argv))
File "bin/osh", line 400, in OilMain
status = OshMain(main_argv)
File "bin/osh", line 318, in OshMain
node = c_parser.ParseWholeFile()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1559, in ParseWholeFile
node = self.ParseCommandTerm()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1467, in ParseCommandTerm
child = self.ParseAndOr()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1332, in ParseAndOr
left = self.ParsePipeline()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1268, in ParsePipeline
child = self.ParseCommand()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1230, in ParseCommand
node = self.ParseCompoundCommand()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1038, in ParseCompoundCommand
return self.ParseIf()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 980, in ParseIf
body = self.ParseCommandList()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1537, in ParseCommandList
node = self.ParseCommandTerm()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1467, in ParseCommandTerm
child = self.ParseAndOr()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1332, in ParseAndOr
left = self.ParsePipeline()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1268, in ParsePipeline
child = self.ParseCommand()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1250, in ParseCommand
return self.ParseSimpleCommand() # echo foo
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 547, in ParseSimpleCommand
result = self._ScanSimpleCommand()
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 354, in _ScanSimpleCommand
if not self._Peek(): return None
File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 151, in _Peek
w = self.w_parser.ReadWord(self.next_lex_mode)
File "/home/andy/git/oil/bin/../osh/word_parse.py", line 1107, in ReadWord
w, need_more = self._ReadWord(lex_mode)
File "/home/andy/git/oil/bin/../osh/word_parse.py", line 1068, in _ReadWord
w = self._ReadCompoundWord(lex_mode=lex_mode)
File "/home/andy/git/oil/bin/../osh/word_parse.py", line 914, in _ReadCompoundWord
part = self._ReadLeftParts()
File "/home/andy/git/oil/bin/../osh/word_parse.py", line 533, in _ReadLeftParts
return self._ReadBracedBracedVarSub(d_quoted=False)
File "/home/andy/git/oil/bin/../osh/word_parse.py", line 459, in _ReadBracedBracedVarSub
raise AssertionError(self.cur_token)
AssertionError: (token id:Unknown_Tok val:"%" span_id:15)
|
| dash | 12 { is its own word, needs a space stdout: stderr: /bin/dash: 1: {ls: not found
|
| mksh | 12 { is its own word, needs a space stdout: stderr: /bin/mksh: <stdin>[1]: syntax error: '}' unexpected |
| osh | 12 { 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
|