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 1 stdout: stderr: Traceback (most recent call last): File "bin/osh", line 378, in <module> sys.exit(main(sys.argv)) File "bin/osh", line 368, in main return OshMain(main_argv) File "bin/osh", line 327, in OshMain status = ex.Execute(node) File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 959, in Execute status = self._Execute(node) File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 789, in _Execute ok, val = self.ev.EvalWordToAny(pair.rhs) File "/home/andy/git/oil/bin/../core/word_eval.py", line 931, in EvalWordToAny if (len(word.parts) == 1 and AttributeError: 'NoneType' object has no attribute 'parts' |
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 1 stdout: stderr: Traceback (most recent call last): File "bin/osh", line 378, in <module> sys.exit(main(sys.argv)) File "bin/osh", line 368, in main return OshMain(main_argv) File "bin/osh", line 327, in OshMain status = ex.Execute(node) File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 959, in Execute status = self._Execute(node) File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 789, in _Execute ok, val = self.ev.EvalWordToAny(pair.rhs) File "/home/andy/git/oil/bin/../core/word_eval.py", line 931, in EvalWordToAny if (len(word.parts) == 1 and AttributeError: 'NoneType' object has no attribute 'parts' |
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 378, in <module> sys.exit(main(sys.argv)) File "bin/osh", line 368, in main return OshMain(main_argv) File "bin/osh", line 286, in OshMain node = c_parser.ParseWholeFile() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1534, in ParseWholeFile node = self.ParseCommandTerm() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1442, in ParseCommandTerm child = self.ParseAndOr() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1307, in ParseAndOr left = self.ParsePipeline() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1243, in ParsePipeline child = self.ParseCommand() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1225, in ParseCommand return self.ParseSimpleCommand() # echo foo File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 538, in ParseSimpleCommand result = self._ScanSimpleCommand() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 350, in _ScanSimpleCommand if not self._Peek(): return None File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 147, in _Peek w = self.w_parser.ReadWord(self.next_lex_mode) File "/home/andy/git/oil/bin/../osh/word_parse.py", line 1098, in ReadWord w, need_more = self._ReadWord(lex_mode) File "/home/andy/git/oil/bin/../osh/word_parse.py", line 1059, in _ReadWord w = self._ReadCompoundWord(lex_mode=lex_mode) File "/home/andy/git/oil/bin/../osh/word_parse.py", line 905, in _ReadCompoundWord part = self._ReadLeftParts() File "/home/andy/git/oil/bin/../osh/word_parse.py", line 532, in _ReadLeftParts return self._ReadBracedBracedVarSub(d_quoted=False) File "/home/andy/git/oil/bin/../osh/word_parse.py", line 458, 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 378, in <module> sys.exit(main(sys.argv)) File "bin/osh", line 368, in main return OshMain(main_argv) File "bin/osh", line 286, in OshMain node = c_parser.ParseWholeFile() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1534, in ParseWholeFile node = self.ParseCommandTerm() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1442, in ParseCommandTerm child = self.ParseAndOr() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1307, in ParseAndOr left = self.ParsePipeline() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1243, in ParsePipeline child = self.ParseCommand() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1206, in ParseCommand node = self.ParseCompoundCommand() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1016, in ParseCompoundCommand return self.ParseIf() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 971, in ParseIf body = self.ParseCommandList() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1512, in ParseCommandList node = self.ParseCommandTerm() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1442, in ParseCommandTerm child = self.ParseAndOr() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1307, in ParseAndOr left = self.ParsePipeline() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1243, in ParsePipeline child = self.ParseCommand() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1225, in ParseCommand return self.ParseSimpleCommand() # echo foo File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 538, in ParseSimpleCommand result = self._ScanSimpleCommand() File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 350, in _ScanSimpleCommand if not self._Peek(): return None File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 147, in _Peek w = self.w_parser.ReadWord(self.next_lex_mode) File "/home/andy/git/oil/bin/../osh/word_parse.py", line 1098, in ReadWord w, need_more = self._ReadWord(lex_mode) File "/home/andy/git/oil/bin/../osh/word_parse.py", line 1059, in _ReadWord w = self._ReadCompoundWord(lex_mode=lex_mode) File "/home/andy/git/oil/bin/../osh/word_parse.py", line 905, in _ReadCompoundWord part = self._ReadLeftParts() File "/home/andy/git/oil/bin/../osh/word_parse.py", line 532, in _ReadLeftParts return self._ReadBracedBracedVarSub(d_quoted=False) File "/home/andy/git/oil/bin/../osh/word_parse.py", line 458, 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: b'/home/andy/bin/{ls' |