spec test index / oilshell.org
444 passed, 0 OK, 0 not implemented, 0 BUG, 108 failed, 48 timeouts, 0 cases skipped 30 failed under osh
dash | 2 builtin.alias.empty.test [dash status] Expected 0, got 2 stdout: stderr: dash: 4: Syntax error: end of file unexpected |
osh | 2 builtin.alias.empty.test [osh status] Expected 0, got 2 stdout: stderr: ^ [ expansion of alias 'empty' ]:1: Unexpected EOF while parsing command |
osh | 3 builtin.break.lexical.test [osh stdout] Expected '0\npost\n1\npost\n2\npost\n3\npost\n4\npost\n', got '0\n' [osh status] Expected 0, got 1 stdout: 0stderr: brk() { break 5 2>/dev/null; echo post; } ^~~~~ [ stdin ]:1: fatal: Unexpected 'break' (in function call) |
dash | 4 builtin.break.nonlexical.test [dash stdout] Expected '0\n', got '' [dash status] Expected 0, got 2 stdout: stderr: |
bash | 4 builtin.break.nonlexical.test [bash stdout] Expected '0\n', got '' [bash status] Expected 0, got 2 stdout: stderr: |
mksh | 4 builtin.break.nonlexical.test [mksh stdout] Expected '0\n', got '' [mksh status] Expected 0, got 1 stdout: stderr: |
osh | 4 builtin.break.nonlexical.test [osh status] Expected 0, got 1 stdout: 0stderr: brk() { break 5 2>/dev/null; echo post; } ^~~~~ [ stdin ]:2: fatal: Unexpected 'break' (in function call) |
osh | 6 builtin.command.ec.test [osh stdout] Expected '0\n0\n', got '2\n' [osh status] Expected 0, got 1 stdout: 2stderr: command -V alias >/dev/null ^~ [ stdin ]:2: 'command' doesn't accept flag -V |
osh | 8 builtin.command.keyword.test [osh status] Expected 0, got 2 stdout: ! whilestderr: command -V while >/dev/null 2>&1 ^~~~~~~ [ stdin ]:4: fatal: Exiting with status 2 (command in PID 302) |
dash | 9 builtin.command.nospecial.test [dash stdout] Expected '?=1\n', got '?=2\n' stdout: ?=2stderr: dash: 2: readonly: x: is read only |
mksh | 9 builtin.command.nospecial.test [mksh stdout] Expected '?=1\n', got '' [mksh status] Expected 0, got 2 stdout: stderr: mksh: <stdin>[2]: read-only: x |
osh | 11 builtin.continue.lexical.test [osh stdout] Expected '0\npost\nafter\n1\npost\nafter\n2\npost\nafter\n3\npost\nafter\n4\npost\nafter\n', got '0\n' [osh status] Expected 0, got 1 stdout: 0stderr: cnt() { continue 5 2>/dev/null; echo post; } ^~~~~~~~ [ stdin ]:1: fatal: Unexpected 'continue' (in function call) |
dash | 12 builtin.continue.nonlexical.test [dash stdout] Expected '0\n1\n2\n3\n4\n', got '' [dash status] Expected 0, got 2 stdout: stderr: |
bash | 12 builtin.continue.nonlexical.test [bash stdout] Expected '0\n1\n2\n3\n4\n', got '' [bash status] Expected 0, got 2 stdout: stderr: |
mksh | 12 builtin.continue.nonlexical.test [mksh stdout] Expected '0\n1\n2\n3\n4\n', got '' [mksh status] Expected 0, got 1 stdout: stderr: |
osh | 12 builtin.continue.nonlexical.test [osh stdout] Expected '0\n1\n2\n3\n4\n', got '0\n' [osh status] Expected 0, got 1 stdout: 0stderr: cnt() { continue 2>/dev/null; echo post; } ^~~~~~~~ [ stdin ]:2: fatal: Unexpected 'continue' (in function call) |
dash | 13 builtin.dot.break.test [dash stdout] Expected 'a\nb\nc\n', got 'a\n' stdout: astderr: |
bash | 13 builtin.dot.break.test [bash stdout] Expected 'a\nb\nc\n', got 'a\n' stdout: astderr: |
osh | 13 builtin.dot.break.test [osh stdout] Expected 'a\nb\nc\n', got 'a\n' stdout: astderr: |
dash | 14 builtin.dot.nonexistent.test [dash status] Expected 1, got 127 stdout: stderr: dash: 1: .: Can't open ./nonesuch |
dash | 15 builtin.dot.path.test [dash stdout] Expected 'yep\n', got '' [dash status] Expected 0, got 127 stdout: stderr: scr1: 2: .: Can't open /home/andy/git/oilshell/oil/_tmp/spec-tmp/smoosh.test.sh/p1/scr2 |
osh | 15 builtin.dot.path.test [osh stdout] Expected 'yep\n', got '' [osh status] Expected 0, got 1 stdout: stderr: . scr2 ^~~~ scr1:2: source 'scr2' failed: Permission denied $TEST_SHELL scr1 ^~~~~~~~~~~ [ stdin ]:12: fatal: Exiting with status 1 (command in PID 435) |
mksh | 18 builtin.eval.break.test [mksh stdout] Expected 'a\n', got 'a\nb\nc\n' stdout: a b cstderr: mksh: break: can't break mksh: break: can't break mksh: break: can't break |
dash | 20 builtin.exec.badredir.test [dash status] Expected 1, got 2 stdout: stderr: dash: 1: cannot open -: No such file dash: 1: exec: 9: not found |
osh | 27 builtin.export.unset.test [osh stdout] Expected 'export x\nok\n', got '' [osh status] Expected 0, got 1 stdout: stderr: export -p | grep 'export x' ^~~~ [ stdin ]:4: fatal: Exiting with status 1 (command in PID 698) export -p | grep 'export x' ^ [ stdin ]:4: fatal: Exiting with status 1 (pipeline invoked from PID 698) |
osh | 34 builtin.printf.repeat.test [osh stdout] Expected '1 2\n3 4\n5 6\n7 8\n9 0\n', got '' [osh status] Expected 0, got 1 stdout: stderr: %d %d\n ^ (source.ArgvWord word_spid:2):1: printf expected an integer, got '' |
dash | 35 builtin.readonly.assign.noninteractive.test [dash status] Expected 1, got 2 stdout: stderr: dash: 2: export: a: is read only |
mksh | 35 builtin.readonly.assign.noninteractive.test [mksh status] Expected 1, got 2 stdout: stderr: mksh: <stdin>[2]: read-only: a |
dash | 38 builtin.source.nonexistent.earlyexit.test [dash stdout] Expected u'', got 'hi\n' [dash status] Expected 1, got 0 stdout: histderr: dash: 1: source: not found |
osh | 38 builtin.source.nonexistent.earlyexit.test [osh stdout] Expected u'', got 'hi\n' [osh status] Expected 1, got 0 stdout: histderr: source not_a_thing ^~~~~~~~~~~ [ stdin ]:1: source 'not_a_thing' failed: No such file or directory |
dash | 39 builtin.source.nonexistent.test [dash status] Expected 1, got 2 stdout: stderr: dash: 1: source: not found dash: 2: .: nonesuch: not found |
dash | 40 builtin.source.setvar.test [dash stdout] Expected '5\n', got '' [dash status] Expected 0, got 127 stdout: stderr: dash: 3: source: not found |
dash | 41 builtin.special.redir.error.test [dash status] Expected 1, got 2 stdout: stderr: |
osh | 41 builtin.special.redir.error.test [osh stdout] Expected u'', got 'oh no\n' [osh status] Expected 1, got 0 stdout: oh nostderr: : 2>&9 ^~~ [ stdin ]:1: 9: Bad file descriptor |
dash | 44 builtin.test.-nt.-ot.absent.test [dash status] Expected 0, got 1 stdout: stderr: |
dash | 48 builtin.trap.chained.test [dash status] Expected 0, got 1 stdout: stderr: |
mksh | 48 builtin.trap.chained.test [mksh status] Expected 0, got 1 stdout: stderr: |
osh | 48 builtin.trap.chained.test [osh status] Expected 0, got 1 stdout: stderr: |
bash | 50 builtin.trap.exitcode.test [bash status] Expected 0, got 2 stdout: stderr: bash: line 1: set: bad@option: invalid option name |
mksh | 50 builtin.trap.exitcode.test [mksh status] Expected 0, got 1 stdout: stderr: mksh: set: bad@option: bad option |
dash | 52 builtin.trap.false.test [dash stdout] Expected u'', got 'BUG\n' stdout: BUGstderr: |
osh | 53 builtin.trap.kill.undef.test [osh status] Expected 0, got 1 stdout: stderr: trap 'echo derp' KILL ^~~~ [ stdin ]:1: Signal 'KILL' can't be handled trap 'echo nevah' 9 ^ [ stdin ]:2: Signal '9' can't be handled |
dash | 54 builtin.trap.nested.test [dash stdout] Expected 'exit\n', got '' stdout: stderr: |
bash | 54 builtin.trap.nested.test [bash stdout] Expected 'exit\n', got '' stdout: stderr: |
osh | 54 builtin.trap.nested.test [osh stdout] Expected 'exit\n', got '' stdout: stderr: |
bash | 56 builtin.trap.return.test [bash stdout] Expected '1\n', got '0\n' stdout: 0stderr: |
mksh | 56 builtin.trap.return.test [mksh stdout] Expected '1\n', got '0\n' stdout: 0stderr: |
dash | 57 builtin.trap.subshell.false.exit.test [dash stdout] Expected u'', got 'BUG\n' [dash status] Expected 1, got 0 stdout: BUGstderr: |
bash | 57 builtin.trap.subshell.false.exit.test [bash status] Expected 1, got 0 stdout: stderr: |
mksh | 57 builtin.trap.subshell.false.exit.test [mksh status] Expected 1, got 0 stdout: stderr: |
osh | 57 builtin.trap.subshell.false.exit.test [osh status] Expected 1, got 0 stdout: stderr: |
dash | 58 builtin.trap.subshell.false.test [dash stdout] Expected u'', got 'BUG\n' stdout: BUGstderr: |
dash | 59 builtin.trap.subshell.loud2.test [dash stdout] Expected 'HUH\nWEIRD\n', got '' stdout: stderr: dash: 1: set: Illegal option -o bad@option |
bash | 59 builtin.trap.subshell.loud2.test [bash stdout] Expected 'HUH\nWEIRD\n', got '' [bash status] Expected 0, got 2 stdout: stderr: bash: line 1: set: bad@option: invalid option name |
mksh | 59 builtin.trap.subshell.loud2.test [mksh stdout] Expected 'HUH\nWEIRD\n', got '' [mksh status] Expected 0, got 1 stdout: stderr: mksh: set: bad@option: bad option |
osh | 59 builtin.trap.subshell.loud2.test [osh status] Expected 0, got 1 stdout: HUH WEIRDstderr: set -o bad@option ^~~ [ trap ]:1: 'set' got invalid option 'bad@option' |
dash | 60 builtin.trap.subshell.loud.test [dash stdout] Expected 'WEIRD\n', got '' [dash status] Expected 0, got 1 stdout: stderr: |
bash | 60 builtin.trap.subshell.loud.test [bash stdout] Expected 'WEIRD\n', got '' [bash status] Expected 0, got 1 stdout: stderr: |
mksh | 60 builtin.trap.subshell.loud.test [mksh stdout] Expected 'WEIRD\n', got '' [mksh status] Expected 0, got 1 stdout: stderr: |
osh | 60 builtin.trap.subshell.loud.test [osh status] Expected 0, got 1 stdout: WEIRDstderr: |
dash | 61 builtin.trap.subshell.quiet.test [dash stdout] Expected u'', got 'BUG1\nBUG2\nBUG3\nBUG4\n' stdout: BUG1 BUG2 BUG3 BUG4stderr: dash: 1: foo: is read only dash: 1: set: Illegal option -o bad@option |
dash | 62 builtin.trap.subshell.true.ec1.test [dash stdout] Expected u'', got 'bug\n' [dash status] Expected 0, got 1 stdout: bugstderr: |
bash | 62 builtin.trap.subshell.true.ec1.test [bash status] Expected 0, got 1 stdout: stderr: |
mksh | 62 builtin.trap.subshell.true.ec1.test [mksh status] Expected 0, got 1 stdout: stderr: |
osh | 62 builtin.trap.subshell.true.ec1.test [osh status] Expected 0, got 1 stdout: stderr: |
dash | 63 builtin.trap.subshell.truefalse.test [dash stdout] Expected '1\n', got 'BUG\n0\n' stdout: BUG 0stderr: |
dash | 64 builtin.trap.supershell.test [dash stdout] Expected "trap -- 'echo bye' EXIT\ntrap -- 'echo so long' EXIT\nso long\ntrap -- 'echo bye' EXIT\nbye\n", got "trap -- 'echo so long' EXIT\nso long\nbye\n" stdout: trap -- 'echo so long' EXIT so long byestderr: |
bash | 64 builtin.trap.supershell.test [bash stdout] Expected "trap -- 'echo bye' EXIT\ntrap -- 'echo so long' EXIT\nso long\ntrap -- 'echo bye' EXIT\nbye\n", got "trap -- 'echo bye' EXIT\ntrap -- '' PIPE\ntrap -- '' XFSZ\ntrap -- 'echo so long' EXIT\ntrap -- '' PIPE\ntrap -- '' XFSZ\nso long\ntrap -- 'echo bye' EXIT\ntrap -- '' PIPE\ntrap -- '' XFSZ\nbye\n" stdout: trap -- 'echo bye' EXIT trap -- '' PIPE trap -- '' XFSZ trap -- 'echo so long' EXIT trap -- '' PIPE trap -- '' XFSZ so long trap -- 'echo bye' EXIT trap -- '' PIPE trap -- '' XFSZ byestderr: |
mksh | 64 builtin.trap.supershell.test [mksh stdout] Expected "trap -- 'echo bye' EXIT\ntrap -- 'echo so long' EXIT\nso long\ntrap -- 'echo bye' EXIT\nbye\n", got "trap -- 'echo so long' EXIT\nso long\nbye\n" stdout: trap -- 'echo so long' EXIT so long byestderr: |
osh | 64 builtin.trap.supershell.test [osh stdout] Expected "trap -- 'echo bye' EXIT\ntrap -- 'echo so long' EXIT\nso long\ntrap -- 'echo bye' EXIT\nbye\n", got 'bye\n' [osh status] Expected 0, got 2 stdout: byestderr: (trap) ^~~~ [ stdin ]:2: 'trap' requires a code string (trap 'echo so long' EXIT; trap) ^~~~ [ stdin ]:3: 'trap' requires a code string (trap) ^~~~ [ stdin ]:4: 'trap' requires a code string |
dash | 65 builtin.unset.test [dash status] Expected 1, got 2 stdout: unset foo unsetstderr: dash: 8: unset: x: is read only |
bash | 66 parse.eval.error.test [bash stdout] Expected u'', got 'lived\n' [bash status] Expected 0, got 1 stdout: livedstderr: scr: eval: line 2: syntax error: unexpected end of file |
osh | 66 parse.eval.error.test [osh stdout] Expected u'', got 'lived\n' [osh status] Expected 0, got 1 stdout: livedstderr: if ^ [ eval at line 1 of scr ]:1: Unexpected EOF while parsing command |
dash | 84 semantics.command-subst.newline.test [dash stdout] Expected '1\n\n2\n', got '1\n2\n' stdout: 1 2stderr: |
osh | 86 semantics.-C.test [osh status] Expected 0, got 2 stdout: stderr: |
bash | 88 semantics.dot.glob.test [bash stdout] Expected '../foo ./foo\n', got './foo ../foo\n' stdout: ./foo ../foostderr: |
mksh | 88 semantics.dot.glob.test [mksh stdout] Expected '../foo ./foo\n', got '.*/foo\n' stdout: .*/foostderr: |
dash | 89 semantics.errexit.trap.test [dash status] Expected 1, got 0 stdout: stderr: |
osh | 89 semantics.errexit.trap.test [osh status] Expected 1, got 0 stdout: stderr: |
dash | 90 semantics.error.noninteractive.test [dash status] Expected 1, got 127 stdout: stderr: dash: 1: x: z chmod: cannot access 'script': No such file or directory dash: 0: Can't open script |
bash | 90 semantics.error.noninteractive.test [bash status] Expected 1, got 126 stdout: stderr: bash: line 1: x: z chmod: cannot access 'script': No such file or directory /usr/bin/script: /usr/bin/script: cannot execute binary file |
mksh | 90 semantics.error.noninteractive.test [mksh status] Expected 1, got 127 stdout: stderr: mksh: <stdin>[6]: x: z chmod: cannot access 'script': No such file or directory mksh: script: No such file or directory |
dash | 95 semantics.escaping.quote.test [dash stdout] Expected '"\n%\n&\n\'\n(\n)\n*\n+\n,\n-\n.\n/\n:\n;\n<\n=\n>\n?\n@\n[\n]\n^\n_\n{\n|\n}\n~\n \ndone\n', got '"\n#\n%\n&\n\'\n(\n)\n*\n+\n,\n-\n.\n/\n:\n;\n<\n=\n>\n?\n@\n[\n]\n^\n_\n{\n|\n}\n~\n \ndone\n' stdout: " # % & ' ( ) * + , - . / : ; < = > ? @ [ ] ^ _ { | } ~ donestderr: |
bash | 95 semantics.escaping.quote.test [bash stdout] Expected '"\n%\n&\n\'\n(\n)\n*\n+\n,\n-\n.\n/\n:\n;\n<\n=\n>\n?\n@\n[\n]\n^\n_\n{\n|\n}\n~\n \ndone\n', got '"\n#\n%\n&\n\'\n(\n)\n*\n+\n,\n-\n.\n/\n:\n;\n<\n=\n>\n?\n@\n[\n]\n^\n_\n{\n|\n}\n~\n \ndone\n' stdout: " # % & ' ( ) * + , - . / : ; < = > ? @ [ ] ^ _ { | } ~ donestderr: |
mksh | 95 semantics.escaping.quote.test [mksh stdout] Expected '"\n%\n&\n\'\n(\n)\n*\n+\n,\n-\n.\n/\n:\n;\n<\n=\n>\n?\n@\n[\n]\n^\n_\n{\n|\n}\n~\n \ndone\n', got '"\n#\n%\n&\n\'\n(\n)\n*\n+\n,\n-\n.\n/\n:\n;\n<\n=\n>\n?\n@\n[\n]\n^\n_\n{\n|\n}\n~\n \ndone\n' stdout: " # % & ' ( ) * + , - . / : ; < = > ? @ [ ] ^ _ { | } ~ donestderr: |
osh | 95 semantics.escaping.quote.test [osh stdout] Expected '"\n%\n&\n\'\n(\n)\n*\n+\n,\n-\n.\n/\n:\n;\n<\n=\n>\n?\n@\n[\n]\n^\n_\n{\n|\n}\n~\n \ndone\n', got '"\n' [osh status] Expected 0, got 2 stdout: "stderr: printf '%s' " ^ [ backticks at ... ]:1: Unexpected EOF reading double-quoted string that began here $TEST_SHELL script >out ^~~~~~~~~~~ [ stdin ]:9: fatal: Exiting with status 2 (command in PID 2674) |
bash | 98 semantics.evalorder.fun.test [bash stdout] Expected 'got redir\nunset after function call\nredir exists\n', got 'got assign\nassign\nassign exists\n' [bash status] Expected 0, got 1 stdout: got assign assign assign existsstderr: |
mksh | 98 semantics.evalorder.fun.test [mksh stdout] Expected 'got redir\nunset after function call\nredir exists\n', got 'got redir\nredir\nredir exists\n' stdout: got redir redir redir existsstderr: |
dash | 107 semantics.noninteractive.expansion.exit.test [dash status] Expected 1, got 2 stdout: stderr: dash: 2: x: alas, poor yorick |
dash | 109 semantics.pattern.hyphen.test [dash stdout] Expected 'file-\nfile-\nfile-\nfile-\nfilea\nfilea\nfilea\n', got 'file-\nfile-\nfile[[.-.]]\nfile[[=-=]]\nfilea\nfilea\nfilea\n' stdout: file- file- file[[.-.]] file[[=-=]] filea filea fileastderr: |
mksh | 109 semantics.pattern.hyphen.test [mksh stdout] Expected 'file-\nfile-\nfile-\nfile-\nfilea\nfilea\nfilea\n', got 'file-\nfile-\nfile[[.-.]]\nfile[[=-=]]\nfilea\nfile[[:alpha:]]\nfilea\n' stdout: file- file- file[[.-.]] file[[=-=]] filea file[[:alpha:]] fileastderr: |
dash | 111 semantics.pattern.rightbracket.test [dash stdout] Expected 'file]\nfile]\nfile]\nfilea\nfilea\nfilea\n', got 'file]\nfile[[.].]]\nfile[[=]=]]\nfilea\nfilea\nfilea\n' stdout: file] file[[.].]] file[[=]=]] filea filea fileastderr: |
mksh | 111 semantics.pattern.rightbracket.test [mksh stdout] Expected 'file]\nfile]\nfile]\nfilea\nfilea\nfilea\n', got 'file]\nfile[[.].]]\nfile[[=]=]]\nfilea\nfile[[:alpha:]]\nfilea\n' stdout: file] file[[.].]] file[[=]=]] filea file[[:alpha:]] fileastderr: |
dash | 114 semantics.redir.close.test [dash stdout] Expected u'', got 'oops, still open\n' [dash status] Expected 1, got 0 stdout: oops, still openstderr: |
bash | 114 semantics.redir.close.test [bash stdout] Expected u'', got 'oops, still open\n' [bash status] Expected 1, got 0 stdout: oops, still openstderr: |
osh | 120 semantics.special.assign.visible.nonposix.test [osh stdout] Expected '5 7\n', got '\n' stdout: stderr: |
mksh | 121 semantics.splitting.ifs.test [mksh stdout] Expected ' 1 2 3 \n', got ' 1 2 3 \n' stdout: 1 2 3stderr: |
dash | 123 semantics.subshell.break.test [dash stdout] Expected 'a\nb\n', got '' stdout: stderr: |
bash | 123 semantics.subshell.break.test [bash stdout] Expected 'a\nb\n', got '' stdout: stderr: |
bash | 127 semantics.tilde.sep.test [bash stdout] Expected 'ok\n', got '' [bash status] Expected 0, got 1 stdout: stderr: |
osh | 129 semantics.traps.async.test [osh stdout] Expected 'done\n', got '' [osh status] Expected 0, got 131 stdout: stderr: |
dash | 130 semantics.traps.inherit.test [dash stdout] Expected 'got SIGINT\nsending SIGQUIT\n131\n', got 'sending SIGQUIT\n0\n' stdout: sending SIGQUIT 0stderr: |
bash | 130 semantics.traps.inherit.test [bash stdout] Expected 'got SIGINT\nsending SIGQUIT\n131\n', got 'got SIGINT\nsending SIGQUIT\n0\n' stdout: got SIGINT sending SIGQUIT 0stderr: |
dash | 135 semantics.var.dashu.test [dash stdout] Expected 'passed\n', got '1\n' [dash status] Expected 0, got 1 stdout: 1stderr: dash: 1: nonesuch: parameter not set dash: 1: 3: parameter not set dash: 1: nonesuch: parameter not set dash: 1: nonesuch: parameter not set |
mksh | 135 semantics.var.dashu.test [mksh stdout] Expected 'passed\n', got '1\n' [mksh status] Expected 0, got 1 stdout: 1stderr: mksh: nonesuch: parameter not set mksh: 3: parameter not set mksh: nonesuch: parameter not set mksh: nonesuch: parameter not set |
osh | 139 semantics.var.star.emptyifs.test [osh stdout] Expected '<a>\n<b e e>\n<c>\n<HIa>\n<b e e>\n<cBYE>\n', got '<ab e ec>\n<HIab e ecBYE>\n' stdout: <ab e ec> <HIab e ecBYE>stderr: |
osh | 147 sh.monitor.bg.test [osh status] Expected 0, got 3 stdout: Jobs: %1 3 <Process [subprog] command.Simple> Processes: 3660 2 [subprog] command.Simple 3661 3 [subprog] command.Simple 3662 2 [process] kill -TSTP 3661 1625554298 - 1625554298 = 0 Jobs: %1 3 <Process [subprog] command.Simple> Processes: 3660 2 [subprog] command.Simple 3661 3 [subprog] command.Simple 3662 2 [process] kill -TSTP 3661 3663 2 [subprog] command.Simple 1625554298 - 1625554298 = 0stderr: set -m ^~ [ stdin ]:1: 'set' got invalid flag '-m' [PID 3661] Stopped bg >output ^~ [ stdin ]:11: 'bg' isn't implemented |
osh | 149 sh.set.ifs.test [osh stdout] Expected ' \t\n \t\n \t\n', got ' \t\n \t\n' [osh status] Expected 0, got 1 stdout: stderr: /home/andy/git/oilshell/oil/bin/osh: 2: cd: can't cd to / ndy/git /home/andy/git/oilshell/oil/bin/osh: 3: exec: /bin/oil.py: not found |