status | bash | mksh | zsh | ash | osh | |
pass | 7 | 4 | 3 | 0 | 6 | |
ok | 3 | 3 | 4 | 2 | 2 | |
N-I | 0 | 0 | 1 | 8 | 0 | |
BUG | 0 | 3 | 2 | 0 | 0 | |
FAIL | 0 | 0 | 0 | 0 | 2 | |
total | 10 | 10 | 10 | 10 | 10 | |
case | bash | mksh | zsh | ash | osh | description |
0 | pass | ok | ok | N-I | FAIL | printf %q newline |
details | details | details | details | |||
1 | ok | pass | ok | N-I | pass | printf %q spaces |
details | details | details | ||||
2 | pass | BUG | pass | N-I | FAIL | printf %q quotes |
details | details | details | ||||
3 | pass | BUG | pass | N-I | ok | printf %q unprintable |
details | details | details | ||||
4 | pass | pass | pass | N-I | ok | printf %q unicode |
details | details | |||||
5 | ok | BUG | ok | N-I | pass | printf %q invalid unicode |
details | details | details | details | |||
6 | pass | pass | BUG | ok | pass | set |
details | details | |||||
7 | pass | ok | BUG | N-I | pass | declare |
details | details | details | ||||
8 | pass | ok | N-I | N-I | pass | ${var@Q} |
details | details | details | ||||
9 | ok | pass | ok | ok | pass | xtrace |
details | details | details |
20 passed, 14 OK, 9 not implemented, 5 BUG, 2 failed, 0 timeouts, 0 cases skipped 2 failed under osh
mksh | 0 printf %q newline stdout: 'one'$'\n''two' roundtrip-okstderr: |
zsh | 0 printf %q newline stdout: one$'\n'two roundtrip-okstderr: |
ash | 0 printf %q newline stdout: stderr: |
osh | 0 printf %q newline [osh stdout] Expected "$'one\\ntwo'\nroundtrip-ok\n", got "$'one\\ntwo'\n" [osh status] Expected 0, got 1 [osh stderr] Found 'Traceback (most recent' stdout: $'one\ntwo'stderr: Traceback (most recent call last): File "/home/uke/oil/bin/oils_for_unix.py", line 202, in <module> sys.exit(main(sys.argv)) File "/home/uke/oil/bin/oils_for_unix.py", line 171, in main return AppBundleMain(argv) File "/home/uke/oil/bin/oils_for_unix.py", line 141, in AppBundleMain return shell.Main('osh', arg_r, environ, login_shell, loader, readline) File "/home/uke/oil/core/shell.py", line 1266, in Main cmd_flags=cmd_eval.IsMainProgram) File "/home/uke/oil/core/main_loop.py", line 336, in Batch was_parsed, status = Batch2(cmd_ev, c_parser, errfmt, cmd_flags=cmd_flags) File "/home/uke/oil/core/main_loop.py", line 401, in Batch2 is_return, is_fatal = cmd_ev.ExecuteAndCatch(node, cmd_flags) File "/home/uke/oil/osh/cmd_eval.py", line 2285, in ExecuteAndCatch status = self._Execute(node) File "/home/uke/oil/osh/cmd_eval.py", line 2084, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1821, in _Dispatch status = self._DoShAssignment(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1177, in _DoShAssignment rhs = self.word_ev.EvalRhsWord(pair.rhs) File "/home/uke/oil/osh/word_eval.py", line 2188, in EvalRhsWord return self.EvalWordToString(w) File "/home/uke/oil/osh/word_eval.py", line 2097, in EvalWordToString self._EvalWordPart(p, part_vals, 0) File "/home/uke/oil/osh/word_eval.py", line 1867, in _EvalWordPart self._EvalDoubleQuoted(part.parts, part_vals) File "/home/uke/oil/osh/word_eval.py", line 1388, in _EvalDoubleQuoted self._EvalWordPart(p, part_vals, QUOTED) File "/home/uke/oil/osh/word_eval.py", line 1875, in _EvalWordPart quoted) # type: part_value_t File "/home/uke/oil/osh/word_eval.py", line 2623, in _EvalCommandSub stdout_str = self.shell_ex.RunCommandSub(cs_part) File "/home/uke/oil/core/executor.py", line 693, in RunCommandSub status, stdout_str, stderr_str = self.CaptureStdout(node) File "/home/uke/oil/core/executor.py", line 621, in CaptureStdout fds = pyos.WaitForInputs([r, r2]) File "/home/uke/oil/core/pyos.py", line 288, in WaitForInputs r, w, exc = select.select(fd, [], [fd]) TypeError: argument must be an int, or have a fileno() method |
bash | 1 printf %q spaces stdout: one\ twostderr: |
zsh | 1 printf %q spaces stdout: one\ twostderr: |
ash | 1 printf %q spaces stdout: stderr: |
mksh | 2 printf %q quotes stdout: ''\''"' roundtrip-okstderr: |
ash | 2 printf %q quotes stdout: stderr: |
osh | 2 printf %q quotes [osh stdout] Expected '$\'\\\'"\'\nroundtrip-ok\n', got '$\'\\\'"\'\n' [osh status] Expected 0, got 1 [osh stderr] Found 'Traceback (most recent' stdout: $'\'"'stderr: Traceback (most recent call last): File "/home/uke/oil/bin/oils_for_unix.py", line 202, in <module> sys.exit(main(sys.argv)) File "/home/uke/oil/bin/oils_for_unix.py", line 171, in main return AppBundleMain(argv) File "/home/uke/oil/bin/oils_for_unix.py", line 141, in AppBundleMain return shell.Main('osh', arg_r, environ, login_shell, loader, readline) File "/home/uke/oil/core/shell.py", line 1266, in Main cmd_flags=cmd_eval.IsMainProgram) File "/home/uke/oil/core/main_loop.py", line 336, in Batch was_parsed, status = Batch2(cmd_ev, c_parser, errfmt, cmd_flags=cmd_flags) File "/home/uke/oil/core/main_loop.py", line 401, in Batch2 is_return, is_fatal = cmd_ev.ExecuteAndCatch(node, cmd_flags) File "/home/uke/oil/osh/cmd_eval.py", line 2285, in ExecuteAndCatch status = self._Execute(node) File "/home/uke/oil/osh/cmd_eval.py", line 2084, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1821, in _Dispatch status = self._DoShAssignment(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1177, in _DoShAssignment rhs = self.word_ev.EvalRhsWord(pair.rhs) File "/home/uke/oil/osh/word_eval.py", line 2188, in EvalRhsWord return self.EvalWordToString(w) File "/home/uke/oil/osh/word_eval.py", line 2097, in EvalWordToString self._EvalWordPart(p, part_vals, 0) File "/home/uke/oil/osh/word_eval.py", line 1867, in _EvalWordPart self._EvalDoubleQuoted(part.parts, part_vals) File "/home/uke/oil/osh/word_eval.py", line 1388, in _EvalDoubleQuoted self._EvalWordPart(p, part_vals, QUOTED) File "/home/uke/oil/osh/word_eval.py", line 1875, in _EvalWordPart quoted) # type: part_value_t File "/home/uke/oil/osh/word_eval.py", line 2623, in _EvalCommandSub stdout_str = self.shell_ex.RunCommandSub(cs_part) File "/home/uke/oil/core/executor.py", line 693, in RunCommandSub status, stdout_str, stderr_str = self.CaptureStdout(node) File "/home/uke/oil/core/executor.py", line 621, in CaptureStdout fds = pyos.WaitForInputs([r, r2]) File "/home/uke/oil/core/pyos.py", line 288, in WaitForInputs r, w, exc = select.select(fd, [], [fd]) TypeError: argument must be an int, or have a fileno() method |
mksh | 3 printf %q unprintable stdout: ''$'\377'stderr: |
ash | 3 printf %q unprintable stdout: stderr: |
osh | 3 printf %q unprintable stdout: $'\xff'stderr: |
ash | 4 printf %q unicode stdout: stderr: |
osh | 4 printf %q unicode stdout: 'μ'stderr: |
bash | 5 printf %q invalid unicode stdout: $'\316' $'\316μ' $'μ\316' $'\316a' $'a\316'stderr: |
mksh | 5 printf %q invalid unicode stdout: ''$'\316' ''$'\316''μ' 'μ'$'\316'stderr: |
zsh | 5 printf %q invalid unicode stdout: $'\316' $'\316'μ μ$'\316' $'\316'a a$'\316'stderr: |
ash | 5 printf %q invalid unicode stdout: stderr: |
zsh | 6 set stdout: stderr: |
ash | 6 set stdout: zz='onestderr: |
mksh | 7 declare stdout: typeset zz typeset zz=$'one\ntwo'stderr: |
zsh | 7 declare stdout: stderr: |
ash | 7 declare stdout: stderr: |
mksh | 8 ${var@Q} stdout: $'one two μ' $'one two μ'stderr: |
zsh | 8 ${var@Q} stdout: stderr: |
ash | 8 ${var@Q} stdout: stderr: |
bash | 9 xtrace stdout: one twostderr: + echo 'one two' |
zsh | 9 xtrace stdout: one twostderr: +zsh:3> echo 'one two' |
ash | 9 xtrace stdout: one twostderr: + echo 'one two' |