spec test index / oilshell.org
status | dash | bash | mksh | zsh | ash | osh | |
pass | 1 | 8 | 8 | 2 | 7 | 2 | |
ok | 0 | 0 | 0 | 3 | 1 | 4 | |
N-I | 7 | 0 | 0 | 0 | 0 | 0 | |
BUG | 0 | 0 | 0 | 3 | 0 | 0 | |
FAIL | 0 | 0 | 0 | 0 | 0 | 2 | |
total | 8 | 8 | 8 | 8 | 8 | 8 | |
case | dash | bash | mksh | zsh | ash | osh | description |
0 | N-I | pass | pass | BUG | pass | pass | NUL bytes with echo -e |
details | details | ||||||
1 | pass | pass | pass | pass | pass | pass | NUL bytes in printf format |
2 | N-I | pass | pass | ok | pass | ok | NUL bytes in printf value (OSH and zsh agree) |
details | details | details | |||||
3 | N-I | pass | pass | ok | pass | ok | NUL bytes with echo $'\0' (OSH and zsh agree) |
details | details | details | |||||
4 | N-I | pass | pass | BUG | pass | FAIL | NUL bytes and IFS splitting |
details | details | details | |||||
5 | N-I | pass | pass | BUG | pass | ok | NUL bytes with test -n |
details | details | details | |||||
6 | N-I | pass | pass | pass | ok | FAIL | NUL bytes with test -f |
details | details | details | |||||
7 | N-I | pass | pass | ok | pass | ok | NUL bytes with ${#s} (OSH and zsh agree) |
details | details | details |
28 passed, 8 OK, 7 not implemented, 3 BUG, 2 failed, 0 timeouts, 0 cases skipped 2 failed under osh
dash | 0 NUL bytes with echo -e stdout: stderr: |
zsh | 0 NUL bytes with echo -e stdout: stderr: |
dash | 2 NUL bytes in printf value (OSH and zsh agree) stdout: stderr: |
zsh | 2 NUL bytes in printf value (OSH and zsh agree) stdout: stderr: |
osh | 2 NUL bytes in printf value (OSH and zsh agree) stdout: stderr: |
dash | 3 NUL bytes with echo $'\0' (OSH and zsh agree) stdout: stderr: |
zsh | 3 NUL bytes with echo $'\0' (OSH and zsh agree) stdout: stderr: |
osh | 3 NUL bytes with echo $'\0' (OSH and zsh agree) stdout: stderr: |
dash | 4 NUL bytes and IFS splitting stdout: stderr: |
zsh | 4 NUL bytes and IFS splitting stdout: ['', ''] [''] ['a', 'b'] ['a']stderr: |
osh | 4 NUL bytes and IFS splitting [osh stdout] Expected "[]\n['']\n['ab']\n['ab']\n", got '' [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 198, in <module> sys.exit(main(sys.argv)) File "/home/uke/oil/bin/oils_for_unix.py", line 170, in main return AppBundleMain(argv) File "/home/uke/oil/bin/oils_for_unix.py", line 140, in AppBundleMain return shell.Main('osh', arg_r, environ, login_shell, loader, readline) File "/home/uke/oil/core/shell.py", line 1137, in Main cmd_flags=cmd_eval.IsMainProgram) File "/home/uke/oil/core/main_loop.py", line 364, in Batch is_return, is_fatal = cmd_ev.ExecuteAndCatch(node, cmd_flags=cmd_flags) File "/home/uke/oil/osh/cmd_eval.py", line 1954, in ExecuteAndCatch status = self._Execute(node) File "/home/uke/oil/osh/cmd_eval.py", line 1776, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1536, in _Dispatch status = self._DoSimple(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 827, in _DoSimple status = self._RunSimpleCommand(cmd_val, cmd_st, run_flags) File "/home/uke/oil/osh/cmd_eval.py", line 518, in _RunSimpleCommand run_flags) File "/home/uke/oil/core/executor.py", line 364, in RunSimpleCommand status = p.RunProcess(self.waiter, trace.External(cmd_val.argv)) File "/home/uke/oil/core/process.py", line 1169, in RunProcess self.StartProcess(why) File "/home/uke/oil/core/process.py", line 1081, in StartProcess self.thunk.Run() File "/home/uke/oil/core/process.py", line 796, in Run self.ext_prog.Exec(self.argv0_path, self.cmd_val, self.environ) File "/home/uke/oil/core/process.py", line 683, in Exec True) File "/home/uke/oil/core/process.py", line 714, in _Exec posix.execve(argv0_path, argv, environ) TypeError: execve() arg 2 must contain only strings Traceback (most recent call last): File "/home/uke/oil/bin/oils_for_unix.py", line 198, in <module> sys.exit(main(sys.argv)) File "/home/uke/oil/bin/oils_for_unix.py", line 170, in main return AppBundleMain(argv) File "/home/uke/oil/bin/oils_for_unix.py", line 140, in AppBundleMain return shell.Main('osh', arg_r, environ, login_shell, loader, readline) File "/home/uke/oil/core/shell.py", line 1137, in Main cmd_flags=cmd_eval.IsMainProgram) File "/home/uke/oil/core/main_loop.py", line 364, in Batch is_return, is_fatal = cmd_ev.ExecuteAndCatch(node, cmd_flags=cmd_flags) File "/home/uke/oil/osh/cmd_eval.py", line 1954, in ExecuteAndCatch status = self._Execute(node) File "/home/uke/oil/osh/cmd_eval.py", line 1776, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1536, in _Dispatch status = self._DoSimple(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 827, in _DoSimple status = self._RunSimpleCommand(cmd_val, cmd_st, run_flags) File "/home/uke/oil/osh/cmd_eval.py", line 518, in _RunSimpleCommand run_flags) File "/home/uke/oil/core/executor.py", line 364, in RunSimpleCommand status = p.RunProcess(self.waiter, trace.External(cmd_val.argv)) File "/home/uke/oil/core/process.py", line 1169, in RunProcess self.StartProcess(why) File "/home/uke/oil/core/process.py", line 1081, in StartProcess self.thunk.Run() File "/home/uke/oil/core/process.py", line 796, in Run self.ext_prog.Exec(self.argv0_path, self.cmd_val, self.environ) File "/home/uke/oil/core/process.py", line 683, in Exec True) File "/home/uke/oil/core/process.py", line 714, in _Exec posix.execve(argv0_path, argv, environ) TypeError: execve() arg 2 must contain only strings Traceback (most recent call last): File "/home/uke/oil/bin/oils_for_unix.py", line 198, in <module> sys.exit(main(sys.argv)) File "/home/uke/oil/bin/oils_for_unix.py", line 170, in main return AppBundleMain(argv) File "/home/uke/oil/bin/oils_for_unix.py", line 140, in AppBundleMain return shell.Main('osh', arg_r, environ, login_shell, loader, readline) File "/home/uke/oil/core/shell.py", line 1137, in Main cmd_flags=cmd_eval.IsMainProgram) File "/home/uke/oil/core/main_loop.py", line 364, in Batch is_return, is_fatal = cmd_ev.ExecuteAndCatch(node, cmd_flags=cmd_flags) File "/home/uke/oil/osh/cmd_eval.py", line 1954, in ExecuteAndCatch status = self._Execute(node) File "/home/uke/oil/osh/cmd_eval.py", line 1776, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1536, in _Dispatch status = self._DoSimple(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 827, in _DoSimple status = self._RunSimpleCommand(cmd_val, cmd_st, run_flags) File "/home/uke/oil/osh/cmd_eval.py", line 518, in _RunSimpleCommand run_flags) File "/home/uke/oil/core/executor.py", line 364, in RunSimpleCommand status = p.RunProcess(self.waiter, trace.External(cmd_val.argv)) File "/home/uke/oil/core/process.py", line 1169, in RunProcess self.StartProcess(why) File "/home/uke/oil/core/process.py", line 1081, in StartProcess self.thunk.Run() File "/home/uke/oil/core/process.py", line 796, in Run self.ext_prog.Exec(self.argv0_path, self.cmd_val, self.environ) File "/home/uke/oil/core/process.py", line 683, in Exec True) File "/home/uke/oil/core/process.py", line 714, in _Exec posix.execve(argv0_path, argv, environ) TypeError: execve() arg 2 must contain only strings Traceback (most recent call last): File "/home/uke/oil/bin/oils_for_unix.py", line 198, in <module> sys.exit(main(sys.argv)) File "/home/uke/oil/bin/oils_for_unix.py", line 170, in main return AppBundleMain(argv) File "/home/uke/oil/bin/oils_for_unix.py", line 140, in AppBundleMain return shell.Main('osh', arg_r, environ, login_shell, loader, readline) File "/home/uke/oil/core/shell.py", line 1137, in Main cmd_flags=cmd_eval.IsMainProgram) File "/home/uke/oil/core/main_loop.py", line 364, in Batch is_return, is_fatal = cmd_ev.ExecuteAndCatch(node, cmd_flags=cmd_flags) File "/home/uke/oil/osh/cmd_eval.py", line 1954, in ExecuteAndCatch status = self._Execute(node) File "/home/uke/oil/osh/cmd_eval.py", line 1776, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1536, in _Dispatch status = self._DoSimple(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 827, in _DoSimple status = self._RunSimpleCommand(cmd_val, cmd_st, run_flags) File "/home/uke/oil/osh/cmd_eval.py", line 518, in _RunSimpleCommand run_flags) File "/home/uke/oil/core/executor.py", line 364, in RunSimpleCommand status = p.RunProcess(self.waiter, trace.External(cmd_val.argv)) File "/home/uke/oil/core/process.py", line 1169, in RunProcess self.StartProcess(why) File "/home/uke/oil/core/process.py", line 1081, in StartProcess self.thunk.Run() File "/home/uke/oil/core/process.py", line 796, in Run self.ext_prog.Exec(self.argv0_path, self.cmd_val, self.environ) File "/home/uke/oil/core/process.py", line 683, in Exec True) File "/home/uke/oil/core/process.py", line 714, in _Exec posix.execve(argv0_path, argv, environ) TypeError: execve() arg 2 must contain only strings |
dash | 5 NUL bytes with test -n stdout: stderr: |
zsh | 5 NUL bytes with test -n stdout: status=0 status=0stderr: |
osh | 5 NUL bytes with test -n stdout: status=1 status=0stderr: |
dash | 6 NUL bytes with test -f stdout: stderr: |
ash | 6 NUL bytes with test -f stdout: status=1 status=0 status=1 status=1stderr: |
osh | 6 NUL bytes with test -f [osh stdout] Expected 'status=1\nstatus=0\nstatus=0\nstatus=1\n', got '' [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 198, in <module> sys.exit(main(sys.argv)) File "/home/uke/oil/bin/oils_for_unix.py", line 170, in main return AppBundleMain(argv) File "/home/uke/oil/bin/oils_for_unix.py", line 140, in AppBundleMain return shell.Main('osh', arg_r, environ, login_shell, loader, readline) File "/home/uke/oil/core/shell.py", line 1137, in Main cmd_flags=cmd_eval.IsMainProgram) File "/home/uke/oil/core/main_loop.py", line 364, in Batch is_return, is_fatal = cmd_ev.ExecuteAndCatch(node, cmd_flags=cmd_flags) File "/home/uke/oil/osh/cmd_eval.py", line 1954, in ExecuteAndCatch status = self._Execute(node) File "/home/uke/oil/osh/cmd_eval.py", line 1776, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1536, in _Dispatch status = self._DoSimple(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 827, in _DoSimple status = self._RunSimpleCommand(cmd_val, cmd_st, run_flags) File "/home/uke/oil/osh/cmd_eval.py", line 518, in _RunSimpleCommand run_flags) File "/home/uke/oil/core/executor.py", line 327, in RunSimpleCommand return self.RunBuiltin(builtin_id, cmd_val) File "/home/uke/oil/core/executor.py", line 211, in RunBuiltin status = builtin_func.Run(cmd_val) File "/home/uke/oil/builtin/bracket_osh.py", line 271, in Run b = bool_ev.EvalB(bool_node) File "/home/uke/oil/osh/sh_expr_eval.py", line 1084, in EvalB return bool_stat.DoUnaryOp(op_id, s) File "/home/uke/oil/osh/bool_stat.py", line 46, in DoUnaryOp st = posix.stat(s) TypeError: stat() argument 1 must be encoded string without null bytes, not str |
dash | 7 NUL bytes with ${#s} (OSH and zsh agree) stdout: stderr: |
zsh | 7 NUL bytes with ${#s} (OSH and zsh agree) stdout: empty=0 nul=1stderr: |
osh | 7 NUL bytes with ${#s} (OSH and zsh agree) stdout: empty=0 nul=1stderr: |