FAIL ./check.t:KSH_VERSION Description: Check version of shell. unexpected stdout - first difference: line 1, char 17 (wanted '4', got '3' wanted: @(#)MIRBSD KSH R40 2012/04/27 got: @(#)MIRBSD KSH R39-w32-beta7 $Date: 2012/05/01 16:57:51 $ pass ./check.t:selftest-1 pass ./check.t:selftest-2 pass ./check.t:selftest-3 FAIL ./check.t:selftest-direct-builtin-call Description: Check that direct builtin calls work unexpected exit status 32512 (exit-code 127), expected 0 unexpected stdout - got too little output wanted: -c echo foo got nothing unexpected stderr - got too much output wanted nothing got: ln: creating symbolic link `cat' to `d:/gnuwin32/home/mksh/mksh': No such file or directory ln: creating symbolic link `echo' to `d:/gnuwin32/home/mksh/mksh': No such file or directory d:/gnuwin32/home/mksh/mksh.exe: [3]: ./echo: not found d:/gnuwin32/home/mksh/mksh.exe: [3]: ./cat: not found pass ./check.t:alias-1 pass ./check.t:alias-2 pass ./check.t:alias-3 pass ./check.t:alias-4 pass ./check.t:alias-5 pass ./check.t:alias-6 pass ./check.t:alias-7 pass ./check.t:alias-8 pass ./check.t:alias-9 FAIL ./check.t:alias-10 Description: Check that recursion is detected/avoided in aliases. Regression, introduced during an old bugfix. unexpected exit status 1280 (exit-code 5), expected 0 unexpected stdout - got too little output wanted: hello world got nothing pass ./check.t:arith-lazy-1 pass ./check.t:arith-lazy-2 pass ./check.t:arith-lazy-3 pass ./check.t:arith-ternary-prec-1 pass ./check.t:arith-ternary-prec-2 pass ./check.t:arith-div-assoc-1 pass ./check.t:arith-div-byzero FAIL ./check.t:arith-div-intmin-by-minusone Description: Check division overflow wraps around silently unexpected exit status 38144 (exit-code 149), expected 0 unexpected stdout - got too little output wanted: signed:-2147483648r0. unsigned:0r2147483648. got nothing pass ./check.t:arith-assop-assoc-1 pass ./check.t:arith-unsigned-1 pass ./check.t:arith-limit32-1 pass ./check.t:bksl-nl-ign-1 pass ./check.t:bksl-nl-ign-2 pass ./check.t:bksl-nl-ign-3 pass ./check.t:bksl-nl-ign-4 pass ./check.t:bksl-nl-ign-5 pass ./check.t:bksl-nl-1 pass ./check.t:bksl-nl-2 pass ./check.t:bksl-nl-3 pass ./check.t:bksl-nl-4 pass ./check.t:bksl-nl-5 pass ./check.t:bksl-nl-6 pass ./check.t:bksl-nl-7 FAIL ./check.t:bksl-nl-8 Description: Check that \newline is collapsed in various 2+ character tokens delimiter. (ksh93 fails this) unexpected stdout - first difference: line 7, char 1 (wanted '0', got '1' wanted: hi there foo stuff more stuff abcdef 0 hi got: hi there foo stuff more stuff abcdef 1 hi unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [19]: cannot create /dev/null: No such file or directory pass ./check.t:bksl-nl-9 pass ./check.t:bksl-nl-10 pass ./check.t:bksl-nl-ksh-1 pass ./check.t:bksl-nl-ksh-2 pass ./check.t:break-1 pass ./check.t:break-2 pass ./check.t:break-3 pass ./check.t:break-4 pass ./check.t:break-5 pass ./check.t:continue-1 pass ./check.t:continue-2 pass ./check.t:continue-3 pass ./check.t:continue-4 pass ./check.t:continue-5 FAIL ./check.t:cd-history Description: Test someone's CD history package (uses arrays) unexpected stdout - first difference: line 1, char 1 (wanted '/', got 'C' wanted: /bin /tmp 3 / 2 /etc 1 /bin 0 /tmp got: C:/DOCUME~1/Roy/LOCALS~1/Temp/rtd8340 1 / 0 C:/DOCUME~1/Roy/LOCALS~1/Temp/rtd8340 unexpected stderr - got too much output wanted nothing got: _cd: [143]: cd: /tmp - No such file or directory _cd: [144]: cd: /bin - No such file or directory _cd: [145]: cd: /etc - No such file or directory _cd: [147]: cd: -2: unknown option pass ./check.t:env-prompt FAIL ./check.t:expand-ugly Description: Check that weird ${foo+bar} constructs are parsed correctly unexpected stdout - first difference: line 36, char 6 (wanted '\', got ' ' wanted: 1 }z 2 ''z} 3 foo 'bar baz 4 foo b c baz 5 foo b c baz 6 }z 7 }z 8 ""z} 9 "}"z 10 foo bar} baz 11 ''z} 12 }z 13 }z 14 }z 15 <}> . 16 hi there 17 hi there 18 hi there 19 hi there 20 hi there 21 hi there 22 hi there 23 hi there 24 'value' 25 'value' 26 $key 27 'value' 28 'x ~ x''x}"x}" # 29 <{}b> <}> . 30 . 32 . 33 . 34 . 35 . 36 . 37 . 38 xay / x'a'y . 39 x' / x' . 40 < b c> . got: 1 }z 2 ''z} 3 foo 'bar baz 4 foo b c baz 5 foo b c baz 6 }z 7 }z 8 ""z} 9 "}"z 10 foo bar} baz 11 ''z} 12 }z 13 }z 14 }z 15 <}> . 16 hi there 17 hi there 18 hi there 19 hi there 20 hi there 21 hi there 22 hi there 23 hi there 24 'value' 25 'value' 26 $key 27 'value' 28 'x ~ x''x}"x}" # 29 <{}b> <}> . 30 . 32 . 33 . 34 . 35 . 36 . 37 . 38 xay / x'a'y . 39 x' / x'a'y . 40 < b c> . pass ./check.t:expand-unglob-dblq pass ./check.t:expand-unglob-unq FAIL ./check.t:expand-threecolons-dblq Description: Check for a particular thing that used to segfault unexpected exit status 1280 (exit-code 5), expected 1 unexpected stderr - wanted pattern: /bad substitution/ got nothing FAIL ./check.t:expand-threecolons-unq Description: Check for a particular thing that used to not error out unexpected exit status 0 (exit-code 0), expected 1 unexpected stdout - got too much output wanted nothing got: 233 0 but still living unexpected stderr - wanted pattern: /bad substitution/ got nothing FAIL ./check.t:expand-weird-1 Description: Check corner case of trim expansion vs. $# vs. ${#var} unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: 11 2 1 2 got: 11 2 unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [4]: ${##1}: bad substitution pass ./check.t:expand-weird-2 pass ./check.t:eglob-bad-1 pass ./check.t:eglob-bad-2 pass ./check.t:eglob-infinite-plus pass ./check.t:eglob-subst-1 pass ./check.t:eglob-nomatch-1 pass ./check.t:eglob-match-1 pass ./check.t:eglob-case-1 pass ./check.t:eglob-case-2 pass ./check.t:eglob-trim-1 pass ./check.t:eglob-trim-2 FAIL ./check.t:eglob-trim-3 Description: Check eglobbing works in trims, for Korn Shell Ensure eglobbing does not work for reduced-feature /bin/sh unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - first difference: line 3, char 5 (wanted 'b', got ',' wanted: got: unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [11]: no closing quote pass ./check.t:eglob-substrpl-1 pass ./check.t:eglob-substrpl-2 pass ./check.t:eglob-substrpl-3a pass ./check.t:eglob-substrpl-3b pass ./check.t:eglob-substrpl-3c pass ./check.t:eglob-utf8-1 pass ./check.t:glob-bad-1 pass ./check.t:glob-range-1 pass ./check.t:glob-range-2 pass ./check.t:glob-range-4 pass ./check.t:glob-range-5 pass ./check.t:heredoc-1 pass ./check.t:heredoc-2 pass ./check.t:heredoc-3 pass ./check.t:heredoc-4 pass ./check.t:heredoc-5 pass ./check.t:heredoc-6 pass ./check.t:heredoc-7 pass ./check.t:heredoc-8 pass ./check.t:heredoc-9a pass ./check.t:heredoc-9c pass ./check.t:heredoc-9d pass ./check.t:heredoc-9e FAIL ./check.t:heredoc-10 Description: Check direct here document assignment unexpected stdout - first difference: line 2, char 1 (wanted '\t', got ' ' wanted: function foo { vc= <<-EOF =c $x \x40= EOF } | va={=a u \x40= } vb={=b $x \x40= } vc={=c u \x40= } vd={=d u \x40= } ve={=e $x \x40= } vf={=f $x @= } | got: function foo { vc= <<- EOF =c $x \x40= EOF } | va={} vb={} vc={} vd={} ve={} vf={} | FAIL ./check.t:heredoc-11 Description: Check here documents with no or empty delimiter unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: function foo { vc= <<- =c $x \x40= << vd= <<-"" =d $x \x40= } | va={=a u \x40= } vb={=b $x \x40= } vc={=c u \x40= } vd={=d $x \x40= } | got nothing unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [2]: syntax error: 'newline' unexpected pass ./check.t:heredoc-comsub-1 FAIL ./check.t:heredoc-comsub-2 Description: Tests for here documents in COMSUB, taken from Austin ML unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: = this paren ) is a problem = got nothing unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: here document 'EOF' unclosed pass ./check.t:heredoc-comsub-3 FAIL ./check.t:heredoc-comsub-4 Description: Tests for here documents in COMSUB, taken from Austin ML unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: = these parens \( ) are a problem = got nothing unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: here document 'EOF' unclosed FAIL ./check.t:heredoc-subshell-1 Description: Tests for here documents in subshells, taken from Austin ML unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: some text end got nothing unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [5]: here document 'EOF' unclosed pass ./check.t:heredoc-subshell-2 pass ./check.t:heredoc-subshell-3 pass ./check.t:heredoc-weird-1 pass ./check.t:heredoc-weird-2 pass ./check.t:heredoc-weird-4 pass ./check.t:heredoc-weird-5 pass ./check.t:heredoc-quoting-unsubst pass ./check.t:heredoc-quoting-subst pass ./check.t:heredoc-tmpfile-1 pass ./check.t:heredoc-tmpfile-2 pass ./check.t:heredoc-tmpfile-3 pass ./check.t:heredoc-tmpfile-4 pass ./check.t:heredoc-tmpfile-5 pass ./check.t:heredoc-tmpfile-6 pass ./check.t:heredoc-tmpfile-7 pass ./check.t:heredoc-tmpfile-8 pass ./check.t:history-basic pass ./check.t:history-dups pass ./check.t:history-unlink pass ./check.t:history-e-minus-1 pass ./check.t:history-e-minus-2 pass ./check.t:history-e-minus-3 pass ./check.t:history-e-minus-4 pass ./check.t:history-e-minus-5 pass ./check.t:history-list-1 pass ./check.t:history-list-2 pass ./check.t:history-list-3 pass ./check.t:history-list-4 pass ./check.t:history-list-5 pass ./check.t:history-list-6 pass ./check.t:history-list-7 pass ./check.t:history-list-r-1 pass ./check.t:history-list-r-2 pass ./check.t:history-list-r-3 pass ./check.t:history-subst-1 pass ./check.t:history-subst-2 pass ./check.t:history-subst-3 pass ./check.t:history-subst-4 pass ./check.t:history-subst-5 FAIL ./check.t:history-ed-1 (ignored) Description: Basic (ed) editing works (assumes you have generic ed editor that prints no prompts). This is for newish ed(1) and stderr. unexpected exit status 32512 (exit-code 127), expected 0 unexpected stdout - got too little output wanted: abc def FOOBAR def got: abc def unexpected stderr - wanted pattern: /^X*13\n16\necho FOOBAR def\nX*$/ got: XXd:/gnuwin32/home/mksh/mksh.exe: ed: not found Xd:/gnuwin32/home/mksh/mksh.exe: [3]: s/abc/FOOBAR/: not found Xd:/gnuwin32/home/mksh/mksh.exe: [4]: w: not found Xd:/gnuwin32/home/mksh/mksh.exe: [5]: q: not found X [incomplete last line] FAIL ./check.t:history-ed-2 (ignored) Description: Correct command is edited when number given unexpected exit status 32512 (exit-code 127), expected 0 unexpected stdout - got too little output wanted: line 1 line 2 is here line 3 line 4 line 2 is changed got: line 1 line 2 is here line 3 line 4 unexpected stderr - wanted pattern: /^X*20\n23\necho line 2 is changed\nX*$/ got: XXXXXd:/gnuwin32/home/mksh/mksh.exe: ed: not found Xd:/gnuwin32/home/mksh/mksh.exe: [6]: s/is: not found Xd:/gnuwin32/home/mksh/mksh.exe: [7]: w: not found Xd:/gnuwin32/home/mksh/mksh.exe: [8]: q: not found X [incomplete last line] FAIL ./check.t:history-ed-3 (ignored) Description: Newly created multi line commands show up as single command in history. unexpected stdout - first difference: line 2, char 1 (wanted 'F', got 'a' wanted: abc def FOOBAR def a new line 1 echo abc def 2 echo FOOBAR def 3 echo a new line got: abc def a new line 1 echo abc def 2 fc echo 3 s/abc/FOOBAR/ 4 $a 5 echo a new line 6 . 7 w 8 q unexpected stderr - wanted pattern: /^X*13\n32\necho FOOBAR def\necho a new line\nX*$/ got: XXd:/gnuwin32/home/mksh/mksh.exe: ed: not found Xd:/gnuwin32/home/mksh/mksh.exe: [3]: s/abc/FOOBAR/: not found XXXd:/gnuwin32/home/mksh/mksh.exe: [6]: .: missing argument Xd:/gnuwin32/home/mksh/mksh.exe: [7]: w: not found Xd:/gnuwin32/home/mksh/mksh.exe: [8]: q: not found XX [incomplete last line] pass ./check.t:IFS-space-1 pass ./check.t:IFS-colon-1 pass ./check.t:IFS-null-1 pass ./check.t:IFS-space-colon-1 pass ./check.t:IFS-space-colon-2 pass ./check.t:IFS-space-colon-4 pass ./check.t:IFS-space-colon-5 pass ./check.t:IFS-subst-1 pass ./check.t:integer-base-err-1 pass ./check.t:integer-base-err-2 pass ./check.t:integer-base-err-3 pass ./check.t:integer-base-err-4 pass ./check.t:integer-base-1 pass ./check.t:integer-base-2 pass ./check.t:integer-base-3 pass ./check.t:integer-base-4 pass ./check.t:integer-base-5 pass ./check.t:integer-base-6 pass ./check.t:integer-base-7 FAIL ./check.t:integer-base-check-flat Description: Check behaviour does not match POSuX, because a not type-safe scripting language has *no* business interpreting "010" as octal unexpected stdout - first difference: line 1, char 5 (wanted '1', got '8' wanted: :10.10.16. got: :10.8.16. pass ./check.t:integer-base-check-numeric-from FAIL ./check.t:integer-base-check-numeric-to Description: Check behaviour for base one to 36, and that 37 errors out unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: 1:1#@.64. 2:2#1000000.64. 3:3#2101.64. 4:4#1000.64. 5:5#224.64. 6:6#144.64. 7:7#121.64. 8:8#100.64. 9:9#71.64. 10:64.64. 11:11#59.64. 12:12#54.64. 13:13#4C.64. 14:14#48.64. 15:15#44.64. 16:16#40.64. 17:17#3D.64. 18:18#3A.64. 19:19#37.64. 20:20#34.64. 21:21#31.64. 22:22#2K.64. 23:23#2I.64. 24:24#2G.64. 25:25#2E.64. 26:26#2C.64. 27:27#2A.64. 28:28#28.64. 29:29#26.64. 30:30#24.64. 31:31#22.64. 32:32#20.64. 33:33#1V.64. 34:34#1U.64. 35:35#1T.64. 36:36#1S.64. 37:36#1S.64. got: 1:1#@.64. 2:2#1000000.64. 3:3#2101.64. 4:4#1000.64. 5:5#224.64. 6:6#144.64. 7:7#121.64. 8:8#100.64. 9:9#71.64. 10:64.64. 11:11#59.64. 12:12#54.64. 13:13#4C.64. 14:14#48.64. 15:15#44.64. 16:16#40.64. 17:17#3D.64. 18:18#3A.64. 19:19#37.64. 20:20#34.64. 21:21#31.64. 22:22#2K.64. 23:23#2I.64. 24:24#2G.64. 25:25#2E.64. 26:26#2C.64. 27:27#2A.64. 28:28#28.64. 29:29#26.64. 30:30#24.64. 31:31#22.64. 32:32#20.64. 33:33#1V.64. 34:34#1U.64. 35:35#1T.64. 36:36#1S.64. unexpected stderr - wanted pattern: /.*bad integer base: 37/ got: d:/gnuwin32/home/mksh/mksh.exe: 37#1R: bad number '37#1R' pass ./check.t:integer-arithmetic-span pass ./check.t:lineno-stdin pass ./check.t:lineno-inc pass ./check.t:lineno-func pass ./check.t:lineno-unset pass ./check.t:lineno-unset-use FAIL ./check.t:lineno-trap Description: Check if LINENO is tracked in traps unexpected stdout - first difference: line 1, char 7 (wanted '6', got '0' wanted: line <6> got: line <0> FAIL ./check.t:unknown-trap Description: Ensure unknown traps are not a syntax error unexpected stdout - first difference: line 1, char 24 (wanted ''', got 'U' wanted: PROG: trap: bad signal 'UNKNOWNSIGNAL' foo =1 PROG: trap: bad signal 'UNKNOWNSIGNAL' PROG: trap: bad signal '999999' PROG: trap: bad signal 'FNORD' = 3 trap 2 executed got: PROG: trap: bad signal UNKNOWNSIGNAL pass ./check.t:read-IFS-1 pass ./check.t:read-ksh-1 pass ./check.t:read-regress-1 FAIL ./check.t:read-delim-1 Description: Check read with delimiters unexpected stdout - got too little output wanted: got nothing unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [4]: read: -d: unknown option d:/gnuwin32/home/mksh/mksh.exe: [5]: read: -d: unknown option d:/gnuwin32/home/mksh/mksh.exe: [6]: read: -d: unknown option FAIL ./check.t:read-ext-1 Description: Check read with number of bytes specified, and -A unexpected stdout - first difference: line 2, char 6 (wanted 'f', got 'u' wanted: x1a= x1b= x2a=1 x2b=1 x2c=0 x3a= got: x1a= x1b= x2a=1 x2b=1 x2c=1 x3a= unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [5]: read: -N: unknown option d:/gnuwin32/home/mksh/mksh.exe: [7]: read: -N: unknown option d:/gnuwin32/home/mksh/mksh.exe: [8]: read: -n: unknown option d:/gnuwin32/home/mksh/mksh.exe: [9]: read: -A: unknown option pass ./check.t:regression-1 pass ./check.t:regression-2 pass ./check.t:regression-6 pass ./check.t:regression-9 pass ./check.t:regression-10 pass ./check.t:regression-11 pass ./check.t:regression-12 pass ./check.t:regression-13 FAIL ./check.t:regression-14 Description: The command $ (foobar) 2> /dev/null generates no output under /bin/sh, but pdksh produces the error foobar: not found Also, the command $ foobar 2> /dev/null generates an error under /bin/sh and pdksh, but AT&T ksh88 produces no error (redirected to /dev/null). unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [1]: cannot create /dev/null: No such file or directory d:/gnuwin32/home/mksh/mksh.exe: [2]: cannot create /dev/null: No such file or directory FAIL ./check.t:regression-15 Description: The command $ whence foobar generates a blank line under pdksh and sets the exit status to 0. AT&T ksh88 generates no output and sets the exit status to 1. Also, the command $ whence foobar cat generates no output under AT&T ksh88 (pdksh generates a blank line and /bin/cat). unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [1]: cannot create /dev/null: No such file or directory pass ./check.t:regression-16 pass ./check.t:regression-17 pass ./check.t:regression-19 pass ./check.t:regression-21 pass ./check.t:regression-22 pass ./check.t:regression-23 FAIL ./check.t:regression-25 Description: Check reading stdin in a while loop. The read should only read a single line, not a whole stdio buffer; the cat should get the rest. unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too much output wanted: a got: a b unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [4]: cannot create /dev/null: No such file or directory d:/gnuwin32/home/mksh/mksh.exe: [4]: cannot create /dev/null: No such file or directory pass ./check.t:regression-26 pass ./check.t:regression-27 pass ./check.t:regression-28 pass ./check.t:regression-29 pass ./check.t:regression-30 pass ./check.t:regression-31 pass ./check.t:regression-32 FAIL ./check.t:regression-33 Description: Does umask print a leading 0 when umask is 3 digits? unexpected stdout - first difference: line 1, char 3 (wanted '2', got '0' wanted: 0222 got: 0200 pass ./check.t:regression-35 FAIL ./check.t:regression-36 Description: Command substitution breaks reading in while loop (test from ) unexpected stdout - first difference: line 1, char 1 (wanted '7', got '8' wanted: 7 1 4 got: 8 2 5 pass ./check.t:regression-37 pass ./check.t:regression-38 pass ./check.t:regression-39 pass ./check.t:regression-40 pass ./check.t:regression-41 FAIL ./check.t:regression-42 Description: Can't use command line assignments to assign readonly parameters. unexpected stderr - wanted pattern: /read-only/ got: d:/gnuwin32/home/mksh/mksh.exe: [6]: foo: is read only FAIL ./check.t:regression-43 Description: Can subshells be prefixed by redirections (historical shells allow this) unexpected exit status 256 (exit-code 1), expected 0 unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [1]: cannot open /dev/null: No such file or directory pass ./check.t:regression-45 pass ./check.t:regression-46 pass ./check.t:regression-47 pass ./check.t:regression-48 pass ./check.t:regression-49 pass ./check.t:regression-50 pass ./check.t:regression-51 pass ./check.t:regression-52 pass ./check.t:regression-53 pass ./check.t:regression-54 pass ./check.t:regression-55 pass ./check.t:regression-57 pass ./check.t:regression-58 pass ./check.t:regression-59 pass ./check.t:regression-60 pass ./check.t:regression-61 pass ./check.t:regression-62 pass ./check.t:regression-63 FAIL ./check.t:regression-64 Description: Check that we can redefine functions calling time builtin unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [4]: cannot create /dev/null: No such file or directory FAIL ./check.t:regression-66 Description: Check that quoting is sane unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: ac_space=' ' ac_newline=$'\n' got nothing FAIL ./check.t:readonly-0 Description: Ensure readonly is honoured for assignments and unset unexpected stdout - first difference: line 3, char 10 (wanted '2', got '1' wanted: 0 x . = aborted, 2 = 1 x . got: 0 x . = aborted, 1 = aborted, 1 unexpected stderr - wanted pattern: /read-only/ got: d:/gnuwin32/home/mksh/mksh: u: is read only d:/gnuwin32/home/mksh/mksh: unset: u is read only FAIL ./check.t:readonly-1 Description: http://austingroupbugs.net/view.php?id=367 for export unexpected stdout - first difference: line 1, char 10 (wanted '2', got '1' wanted: aborted, 2 got: aborted, 1 unexpected stderr - wanted pattern: /read-only/ got: d:/gnuwin32/home/mksh/mksh: foo: is read only pass ./check.t:readonly-2a FAIL ./check.t:readonly-2b Description: http://austingroupbugs.net/view.php?id=367 for getopts unexpected stdout - first difference: line 1, char 1 (wanted '2', got '1' wanted: 2 . got: 1 . unexpected stderr - wanted pattern: /read-only/ got: d:/gnuwin32/home/mksh/mksh: c: is read only FAIL ./check.t:readonly-3 Description: http://austingroupbugs.net/view.php?id=367 for read unexpected stdout - first difference: line 2, char 1 (wanted '2', got '1' wanted: 0 x . 2 . got: 0 x . 1 . unexpected stderr - wanted pattern: /read-only/ got: d:/gnuwin32/home/mksh/mksh: read: s is read only pass ./check.t:syntax-1 pass ./check.t:xxx-quoted-newline-1 pass ./check.t:xxx-quoted-newline-2 pass ./check.t:xxx-quoted-newline-3 pass ./check.t:xxx-multi-assignment-cmd FAIL ./check.t:xxx-multi-assignment-posix-cmd Description: Check that the behaviour for multiple assignments with a command name matches POSIX. See: http://thread.gmane.org/gmane.comp.standards.posix.austin.general/1925 unexpected stdout - first difference: line 1, char 5 (wanted 'a', got 'b' wanted: 1 b a . 2 a b . 3 b . 4 a . got: 1 b b . 2 a b . 3 a . 4 a . pass ./check.t:xxx-multi-assignment-posix-nocmd FAIL ./check.t:xxx-multi-assignment-posix-subassign Description: Check that the behaviour for multiple assignments matches POSIX: - The assignment words shall be expanded in the current execution environment. - The assignments happen in the temporary execution environment. unexpected stdout - first difference: line 3, char 2 (wanted '+', got 'b' wanted: ++ +b+ +a+ /b/ ++ +b+ /b/ got: ++ +b+ +a+ /b/ +b+ +b+ // pass ./check.t:xxx-exec-environment-1 FAIL ./check.t:xxx-exec-environment-2 Description: Check to make sure exec doesn't change environment if a program isn't exec-ed unexpected exit status 256 (exit-code 1), expected 0 pass ./check.t:exec-function-environment-1 pass ./check.t:xxx-what-do-you-call-this-1 pass ./check.t:xxx-prefix-strip-1 pass ./check.t:xxx-prefix-strip-2 pass ./check.t:xxx-variable-syntax-1 FAIL ./check.t:xxx-variable-syntax-2 Description (missing) unexpected exit status 1280 (exit-code 5), expected 1 unexpected stderr - wanted pattern: /bad substitution/ got nothing FAIL ./check.t:xxx-variable-syntax-3 Description (missing) unexpected exit status 1280 (exit-code 5), expected 1 unexpected stderr - wanted pattern: /bad substitution/ got nothing pass ./check.t:xxx-substitution-eval-order pass ./check.t:xxx-set-option-1 pass ./check.t:xxx-exec-1 pass ./check.t:xxx-while-1 pass ./check.t:xxx-status-1 pass ./check.t:xxx-status-2 pass ./check.t:xxx-clean-chars-1 pass ./check.t:xxx-param-subst-qmark-1 pass ./check.t:xxx-param-_-1 FAIL ./check.t:tilde-expand-1 Description: Check tilde expansion after equal signs unexpected stdout - first difference: line 1, char 3 (wanted '/', got 'i' wanted: a=/sweet b=/sweet c=d~ /sweet a=~ b=~ c=d~ /sweet got: a=i:/msys/sweet b=i:/msys/sweet c=d~ i:/msys/sweet a=~ b=~ c=d~ i:/msys/sweet pass ./check.t:exit-err-1 pass ./check.t:exit-err-2 FAIL ./check.t:exit-err-3 Description: pdksh regression which AT&T ksh does right TFM says: [set] -e | errexit Exit (after executing the ERR trap) ... unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [4]: cannot create /dev/null: No such file or directory pass ./check.t:exit-err-4 pass ./check.t:exit-err-5 FAIL ./check.t:exit-enoent-1 Description: SUSv4 says that the shell should exit with 126/127 in some situations unexpected stdout - first difference: line 1, char 3 (wanted '0', got '1' wanted: 0 0 . 1 126 . 2 42 . 3 126 . 4 127 . 5 127 . got: 0 1 . 1 1 . 2 1 . 3 1 . 4 1 . 5 1 . unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [3]: cannot create /dev/null: No such file or directory d:/gnuwin32/home/mksh/mksh.exe: [4]: cannot create /dev/null: No such file or directory d:/gnuwin32/home/mksh/mksh.exe: [6]: cannot create /dev/null: No such file or directory d:/gnuwin32/home/mksh/mksh.exe: [7]: cannot create /dev/null: No such file or directory d:/gnuwin32/home/mksh/mksh.exe: [9]: cannot create /dev/null: No such file or directory d:/gnuwin32/home/mksh/mksh.exe: [10]: cannot create /dev/null: No such file or directory pass ./check.t:exit-eval-1 FAIL ./check.t:exit-trap-1 Description: Check that "exit" with no arguments behaves SUSv4 conformant. unexpected exit status 0 (exit-code 0), expected 9 pass ./check.t:test-stlt-1 pass ./check.t:test-precedence-1 pass ./check.t:test-option-1 pass ./check.t:mkshrc-1 pass ./check.t:mkshrc-2a pass ./check.t:mkshrc-2b pass ./check.t:mkshrc-3 pass ./check.t:sh-mode-1 FAIL ./check.t:sh-mode-2a Description: Check that sh mode is *not* automatically turned on unexpected stdout - first difference: line 1, char 3 (wanted ' ', got '\n' wanted: sh nosh ksh nosh -sh nosh -ksh nosh got: sh ksh -sh -ksh unexpected stderr - got too much output wanted nothing got: ln: creating symbolic link `ksh' to `d:/gnuwin32/home/mksh/mksh': No such file or directory ln: creating symbolic link `sh' to `d:/gnuwin32/home/mksh/mksh': No such file or directory ln: creating symbolic link `./-ksh' to `d:/gnuwin32/home/mksh/mksh': No such file or directory ln: creating symbolic link `./-sh' to `d:/gnuwin32/home/mksh/mksh': No such file or directory d:/gnuwin32/home/mksh/mksh.exe: [8]: ./sh: not found d:/gnuwin32/home/mksh/mksh.exe: [8]: ./ksh: not found d:/gnuwin32/home/mksh/mksh.exe: [8]: ./-sh: not found d:/gnuwin32/home/mksh/mksh.exe: [8]: ./-ksh: not found pass ./check.t:pipeline-1 FAIL ./check.t:pipeline-3 Description: Check that PIPESTATUS does what it's supposed to unexpected stdout - first difference: line 1, char 3 (wanted '0', got '.' wanted: 1 0 . 2 0 . 3 . x 5 42 , 12 , 12 , 23 , 42 , . 6 0 . PIPESTATUS[0]=0 8 PIPESTATUS[0]=0 PIPESTATUS[1]=0 . got: 1 . 2 . 3 . x 5 42 , , , , , . 6 . 8 . FAIL ./check.t:typeset-1 Description: Check that global does what typeset is supposed to do unexpected stdout - first difference: line 2, char 7 (wanted '1', got '6' wanted: before 65 . after 16#41 . before 65 . inside before 65 . inside changed 97 . inside typeset 16#61 . inside changed 16#30 . after 16#30 . got: before 65 . after 65 . before 65 . inside before 65 . inside changed 97 . inside typeset 97 . inside changed 48 . after 48 . unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [6]: global: not found d:/gnuwin32/home/mksh/mksh.exe: [19]: global: not found pass ./check.t:typeset-padding-1 pass ./check.t:typeset-padding-2 FAIL ./check.t:utf8bom-1 Description: Check that the UTF-8 Byte Order Mark is ignored as the first multibyte character of the shell input (with -c, from standard input, as file, or as eval argument), but nowhere else unexpected stdout - first difference: line 2, char 1 (wanted 'o', got '=' wanted: got 4 files ohne = ohne ohne mit ohne = ohne ohne mit ohne = ohne ohne mit ohne = ohne ohne mit ohne = : ohne got: got 4 files = = = = = ? unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh: fnord: not found d:/gnuwin32/home/mksh/mksh: fnord: not found d:/gnuwin32/home/mksh/mksh: fnord: not found d:/gnuwin32/home/mksh/mksh: fnord: not found d:/gnuwin32/home/mksh/mksh: fnord: not found foo/bar[1]: fnord: not found foo/bar[2]: fnord: not found foo/bar[3]: fnord: not found foo/bar[4]: fnord: not found d:/gnuwin32/home/mksh/mksh: [1]: fnord: not found d:/gnuwin32/home/mksh/mksh: [2]: fnord: not found d:/gnuwin32/home/mksh/mksh: [3]: fnord: not found d:/gnuwin32/home/mksh/mksh: [4]: fnord: not found foo/zoo: fnord: not found foo/zoo: fnord: not found foo/zoo: fnord: not found foo/zoo: fnord: not found d:/gnuwin32/home/mksh/mksh: fnord: not found FAIL ./check.t:utf8bom-3 Description: Reading the UTF-8 BOM should enable the utf8-mode flag (temporarily for COMSUBs) unexpected stdout - first difference: line 2, char 4 (wanted 'n', got 'f' wanted: 1 off 2 on 3 off 4 on 5 off got: 1 off 2 off 3 off 4 off 5 off unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh: ?: not found d:/gnuwin32/home/mksh/mksh: ?: not found pass ./check.t:utf8opt-1a pass ./check.t:utf8opt-3a pass ./check.t:utf8opt-3b pass ./check.t:aliases-1-hartz4 pass ./check.t:aliases-2b-hartz4 pass ./check.t:aliases-3b-hartz4 pass ./check.t:aliases-funcdef-1 pass ./check.t:aliases-funcdef-2 pass ./check.t:aliases-funcdef-3 FAIL ./check.t:aliases-funcdef-4 Description: Functions should only take over if actually being defined unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - first difference: line 2, char 6 (wanted '=', got ' ' wanted: local=typeset local=typeset got: local=typeset local alias not found pass ./check.t:arrays-1 pass ./check.t:arrays-2a FAIL ./check.t:arrays-2b Description: Check if bash-style arrays work as expected, with newlines unexpected stdout - first difference: line 1, char 1 (wanted '7', got '1' wanted: 7|a|bc|d|$v|e f|$v|g| 7|a|bc|d|$v|e f|$v|g| 6|abc\|d|$v|e f|$v|g|| got: 1|a||||||| 2|a|bc|||||| 1|abc\||||||| unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: bc: not found d:/gnuwin32/home/mksh/mksh.exe: d: not found d:/gnuwin32/home/mksh/mksh.exe: d: not found d:/gnuwin32/home/mksh/mksh.exe: d: not found d:/gnuwin32/home/mksh/mksh.exe: g: not found pass ./check.t:arrays-3 pass ./check.t:arrays-4 pass ./check.t:arrays-5 pass ./check.t:arrays-6 pass ./check.t:arrays-7 pass ./check.t:arrays-8 FAIL ./check.t:arrays-9a Description: Check that we can concatenate arrays unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: 1 0 1 : bar baz . 2 0 1 2 : foo bar baz . 3 0 2 3 5 : bar foo baz quux . got nothing unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [1]: syntax error: 'baz' unexpected FAIL ./check.t:arrays-9b Description: Check that we can concatenate parameters too unexpected stdout - first difference: line 1, char 6 (wanted 'b', got ' ' wanted: 1 barbaz . 2 16#a20 . got: 1 bar . 2 16#a . unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [1]: foo+=baz: not found d:/gnuwin32/home/mksh/mksh.exe: [2]: foo+=20: not found FAIL ./check.t:arrassign-basic Description: Check basic whitespace conserving properties of wdarrassign unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: .a:a.b.c.d: .b:a.b.c.d: .c:a b.c d..: .d:a b.c d..: got nothing unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [5]: syntax error: '$(echo c d)' unexpected FAIL ./check.t:arrassign-fnc-none Description: Check locality of array access inside a function unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: .f0:m.m..: .fn:m.m.f.: .f1:m.m.f.: .fn:m.m.f.f: .f2:m.m.f.f: .rf0:m.m..: .rfn:f...: .rf1:f...: .rfn:f...: .rf2:f...: got nothing unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [2]: syntax error: 'f' unexpected FAIL ./check.t:arrassign-fnc-local Description: Check locality of array access inside a function with the bash/mksh/ksh93 local/typeset keyword (note: ksh93 has no local; typeset works only in FKSH) unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: .f0:m.m..: .fn:f...: .f1:m.m..: .fn:f...: .f2:m.m..: .rf0:m.m..: .rfn:f...: .rf1:...: .rfn:f...: .rf2:...: .f0r:m.m..: .fnr:f...: .f1r:m.m..: .fnr:f...: .f2r:m.m..: got nothing unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [3]: syntax error: 'f' unexpected FAIL ./check.t:arrassign-fnc-global Description: Check locality of array access inside a function with the mksh-specific global keyword unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: .f0:m.m..: .fn:m.m.f.: .f1:m.m.f.: .fn:m.m.f.f: .f2:m.m.f.f: .rf0:m.m..: .rfn:f...: .rf1:f...: .rfn:f...: .rf2:f...: .f0r:m.m..: .fnr:f...: .f1r:f...: .fnr:f...: .f2r:f...: got nothing unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [3]: syntax error: 'f' unexpected FAIL ./check.t:strassign-fnc-none Description: Check locality of string access inside a function unexpected stdout - first difference: line 2, char 6 (wanted 'f', got ':' wanted: .f0:m: .fn:mf: .f1:mf: .fn:mff: .f2:mff: .rf0:m: .rfn:f: .rf1:f: .rfn:f: .rf2:f: got: .f0:m: .fn:m: .f1:m: .fn:m: .f2:m: .rf0:m: .rfn:: .rf1:: .rfn:: .rf2:: unexpected stderr - got too much output wanted nothing got: fn: [13]: x+=f: not found fn: [15]: x+=f: not found rfn: [18]: y+=f: not found rfn: [20]: y+=f: not found FAIL ./check.t:strassign-fnc-local Description: Check locality of string access inside a function with the bash/mksh/ksh93 local/typeset keyword (note: ksh93 has no local; typeset works only in FKSH) unexpected stdout - first difference: line 2, char 5 (wanted 'f', got ':' wanted: .f0:m: .fn:f: .f1:m: .fn:f: .f2:m: .rf0:m: .rfn:f: .rf1:: .rfn:f: .rf2:: .f0r:m: .fnr:f: .f1r:m: .fnr:f: .f2r:m: got: .f0:m: .fn:: .f1:m: .fn:: .f2:m: .rf0:m: .rfn:: .rf1:: .rfn:: .rf2:: .f0r:m: .fnr:: .f1r:m: .fnr:: .f2r:m: unexpected stderr - got too much output wanted nothing got: fn: [22]: x+=f: not found fn: [24]: x+=f: not found rfn: [27]: y+=f: not found rfn: [29]: y+=f: not found fnr: [32]: z+=f: not found fnr: [34]: z+=f: not found FAIL ./check.t:strassign-fnc-global Description: Check locality of string access inside a function with the mksh-specific global keyword unexpected stdout - first difference: line 2, char 6 (wanted 'f', got ':' wanted: .f0:m: .fn:mf: .f1:mf: .fn:mff: .f2:mff: .rf0:m: .rfn:f: .rf1:f: .rfn:f: .rf2:f: .f0r:m: .fnr:f: .f1r:f: .fnr:f: .f2r:f: got: .f0:m: .fn:m: .f1:m: .fn:m: .f2:m: .rf0:m: .rfn:: .rf1:: .rfn:: .rf2:: .f0r:m: .fnr:: .f1r:: .fnr:: .f2r:: unexpected stderr - got too much output wanted nothing got: fn: [22]: global: not found fn: [22]: x+=f: not found fn: [24]: global: not found fn: [24]: x+=f: not found rfn: [27]: global: not found rfn: [27]: y+=f: not found rfn: [29]: global: not found rfn: [29]: y+=f: not found fnr: [32]: global: not found fnr: [32]: z+=f: not found fnr: [34]: global: not found fnr: [34]: z+=f: not found pass ./check.t:varexpand-substr-1 pass ./check.t:varexpand-substr-2 pass ./check.t:varexpand-substr-3 pass ./check.t:varexpand-substr-4 pass ./check.t:varexpand-substr-5A pass ./check.t:varexpand-substr-5W pass ./check.t:varexpand-substr-6 FAIL ./check.t:varexpand-special-hash Description: Check special ${var@x} expansion for x=hash unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: D50219A0 20E5DB5B 00000000 . 554A1C76 004A212E CB209562 . 6B21CF91 20E5DB5B 124EA49D . got nothing unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [5]: ${foo@#}: bad substitution pass ./check.t:varexpand-null-1 pass ./check.t:varexpand-null-2 pass ./check.t:print-funny-chars pass ./check.t:print-bksl-c FAIL ./check.t:print-nul-chars Description: Check handling of NUL characters for print and COMSUB unexpected stdout - wanted pattern: /^4 3 2 <> <\0>$/ got: 5 4 2 <> <> FAIL ./check.t:print-escapes Description: Check backslash expansion by the print builtin unexpected stdout - first difference: line 10, char 24 (wanted 'A', got 'D' wanted: 00000000 5C 20 5C 21 5C 22 5C 23 - 5C 24 5C 25 5C 26 5C 27 |\ \!\"\#\$\%\&\'| 00000010 5C 28 5C 29 5C 2A 5C 2B - 5C 2C 5C 2D 5C 2E 5C 2F |\(\)\*\+\,\-\.\/| 00000020 5C 31 5C 32 5C 33 5C 34 - 5C 35 5C 36 5C 37 5C 38 |\1\2\3\4\5\6\7\8| 00000030 20 5C 39 5C 3A 5C 3B 5C - 3C 5C 3D 5C 3E 5C 3F 5C | \9\:\;\<\=\>\?\| 00000040 40 5C 41 5C 42 5C 43 5C - 44 1B 5C 46 5C 47 5C 48 |@\A\B\C\D.\F\G\H| 00000050 5C 49 5C 4A 5C 4B 5C 4C - 5C 4D 5C 4E 5C 4F 5C 50 |\I\J\K\L\M\N\O\P| 00000060 5C 51 5C 52 5C 53 5C 54 - 20 5C 56 5C 57 5C 58 5C |\Q\R\S\T \V\W\X\| 00000070 59 5C 5A 5C 5B 5C 5C 5D - 5C 5E 5C 5F 5C 60 07 08 |Y\Z\[\]\^\_\`..| 00000080 20 20 5C 64 1B 0C 5C 67 - 5C 68 5C 69 5C 6A 5C 6B | \d..\g\h\i\j\k| 00000090 5C 6C 5C 6D 0A 5C 6F 5C - 70 20 5C 71 0D 5C 73 09 |\l\m.\o\p \q.\s.| 000000A0 0B 5C 77 5C 79 5C 7A 5C - 7B 5C 7C 5C 7D 5C 7E 20 |.\w\y\z\{\|\}\~ | 000000B0 E2 82 AC 64 20 EF BF BD - 20 12 33 20 78 20 53 20 |...d ... .3 x S | 000000C0 53 34 0A - |S4.| got: 00000000 5C 20 5C 21 5C 22 5C 23 - 5C 24 5C 25 5C 26 5C 27 |\ \!\"\#\$\%\&\'| 00000010 5C 28 5C 29 5C 2A 5C 2B - 5C 2C 5C 2D 5C 2E 5C 2F |\(\)\*\+\,\-\.\/| 00000020 5C 31 5C 32 5C 33 5C 34 - 5C 35 5C 36 5C 37 5C 38 |\1\2\3\4\5\6\7\8| 00000030 20 5C 39 5C 3A 5C 3B 5C - 3C 5C 3D 5C 3E 5C 3F 5C | \9\:\;\<\=\>\?\| 00000040 40 5C 41 5C 42 5C 43 5C - 44 1B 5C 46 5C 47 5C 48 |@\A\B\C\D.\F\G\H| 00000050 5C 49 5C 4A 5C 4B 5C 4C - 5C 4D 5C 4E 5C 4F 5C 50 |\I\J\K\L\M\N\O\P| 00000060 5C 51 5C 52 5C 53 5C 54 - 20 5C 56 5C 57 5C 58 5C |\Q\R\S\T \V\W\X\| 00000070 59 5C 5A 5C 5B 5C 5C 5D - 5C 5E 5C 5F 5C 60 07 08 |Y\Z\[\]\^\_\`..| 00000080 20 20 5C 64 1B 0C 5C 67 - 5C 68 5C 69 5C 6A 5C 6B | \d..\g\h\i\j\k| 00000090 5C 6C 5C 6D 0D 0A 5C 6F - 5C 70 20 5C 71 0D 5C 73 |\l\m..\o\p \q.\s| 000000A0 09 0B 5C 77 5C 79 5C 7A - 5C 7B 5C 7C 5C 7D 5C 7E |..\w\y\z\{\|\}\~| 000000B0 20 E2 82 AC 64 20 EF BF - BD 20 12 33 20 78 20 53 | ...d ... .3 x S| 000000C0 20 53 34 0D 0A - | S4..| FAIL ./check.t:dollar-doublequoted-strings Description: Check that a $ preceding "…" is ignored unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - first difference: line 1, char 1 (wanted 'L', got '$' wanted: Localise me! Me too! I do not take a $V for a V! got: $Localise me! too! unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [8]: here document '$aol' unclosed FAIL ./check.t:dollar-quoted-strings Description: Check backslash expansion by $'…' strings unexpected stdout - first difference: line 2, char 33 (wanted 'A', got 'D' wanted: 00000000 20 21 22 23 24 25 26 27 - 28 29 2A 2B 2C 2D 2E 2F | !"#$%&'()*+,-./| 00000010 20 01 02 03 04 05 06 0A - 61 0A 61 01 62 0A 07 38 | .......a.a.b..8| 00000020 39 3A 3B 3C 3D 3E 3F 40 - 41 42 43 44 1B 46 47 48 |9:;<=>?@ABCD.FGH| 00000030 49 0A 4A 4B 4C 4D 4E 4F - 50 51 52 53 54 01 56 57 |I.JKLMNOPQRST.VW| 00000040 58 59 5A 5B 5C 5D 5E 5F - 60 07 08 64 1B 0A 0C 67 |XYZ[\]^_`..d...g| 00000050 68 69 6A 6B 6C 6D 0A 6F - 70 71 0D 73 09 01 0B 77 |hijklm.opq.s...w| 00000060 01 79 7A 7B 7C 7D 7E 20 - 24 78 0A E2 82 AC 64 0A |.yz{|}~ $x....d.| 00000070 EF BF BD 0A C4 A3 0A 66 - 6E 0A 13 34 0A 9C 0A 9C |.......fn..4....| 00000080 35 0A 01 0A 01 0A 7F 0A - 02 82 AC 0A 61 0A 62 0A |5...........a.b.| got: 00000000 20 21 22 23 24 25 26 27 - 28 29 2A 2B 2C 2D 2E 2F | !"#$%&'()*+,-./| 00000010 20 01 02 03 04 05 06 0D - 0A 61 0D 0A 61 01 62 0D | ........a..a.b.| 00000020 0A 07 38 39 3A 3B 3C 3D - 3E 3F 40 41 42 43 44 1B |..89:;<=>?@ABCD.| 00000030 46 47 48 49 0D 0A 4A 4B - 4C 4D 4E 4F 50 51 52 53 |FGHI..JKLMNOPQRS| 00000040 54 01 56 57 58 59 5A 5B - 5C 5D 5E 5F 60 07 08 64 |T.VWXYZ[\]^_`..d| 00000050 1B 0D 0A 0C 67 68 69 6A - 6B 6C 6D 0D 0A 6F 70 71 |....ghijklm..opq| 00000060 0D 73 09 01 0B 77 01 79 - 7A 7B 7C 7D 7E 20 24 78 |.s...w.yz{|}~ $x| 00000070 0D 0A 3F AC 64 0D 0A EF - BF 3F C4 A3 0D 0A 66 6E |..?.d....?....fn| 00000080 0D 0A 13 34 0D 0A 3F 3F - 0D 0A 01 0D 0A 01 0D 0A |...4..??........| 00000090 7F 0D 0A 02 E2 5C 0D 0A - 61 0D 0A 62 0D 0A |.....\..a..b..| pass ./check.t:dollar-quotes-in-heredocs pass ./check.t:dollar-quotes-in-herestrings pass ./check.t:dot-needs-argument pass ./check.t:alias-function-no-conflict pass ./check.t:bash-function-parens pass ./check.t:integer-base-one-1 pass ./check.t:integer-base-one-2a pass ./check.t:integer-base-one-2b pass ./check.t:integer-base-one-2c1 pass ./check.t:integer-base-one-2c2 pass ./check.t:integer-base-one-2d1 pass ./check.t:integer-base-one-2d2 pass ./check.t:integer-base-one-2d3 pass ./check.t:integer-base-one-2d4 pass ./check.t:integer-base-one-2d5 pass ./check.t:integer-base-one-2d6 FAIL ./check.t:integer-base-one-3As Description: some sample code for hexdumping not NUL safe; input lines must be NL terminated unexpected stdout - first difference: line 1, char 56 (wanted 'A', got 'D' wanted: 00000000 48 65 6C 6C 6F 2C 20 57 - 6F 72 6C 64 21 5C 0A E3 |Hello, World!\..| 00000010 81 93 E3 82 93 E3 81 AB - E3 81 A1 E3 81 AF EF BC |................| 00000020 81 0A 01 02 03 04 05 06 - 07 08 09 0A 0B 0C 0D 0E |................| 00000030 0F 10 11 12 13 14 15 16 - 17 18 19 1A 1B 1C 1D 1E |................| 00000040 1F 20 21 22 23 24 25 26 - 27 28 29 2A 2B 2C 2D 2E |. !"#$%&'()*+,-.| 00000050 2F 30 31 32 33 34 35 36 - 37 38 39 3A 3B 3C 3D 3E |/0123456789:;<=>| 00000060 3F 40 41 42 43 44 45 46 - 47 48 49 4A 4B 4C 4D 4E |?@ABCDEFGHIJKLMN| 00000070 4F 50 51 52 53 54 55 56 - 57 58 59 5A 5B 5C 5D 5E |OPQRSTUVWXYZ[\]^| 00000080 5F 60 61 62 63 64 65 66 - 67 68 69 6A 6B 6C 6D 6E |_`abcdefghijklmn| 00000090 6F 70 71 72 73 74 75 76 - 77 78 79 7A 7B 7C 7D 7E |opqrstuvwxyz{|}~| 000000A0 7F 80 81 82 83 84 85 86 - 87 88 89 8A 8B 8C 8D 8E |................| 000000B0 8F 90 91 92 93 94 95 96 - 97 98 99 9A 9B 9C 9D 9E |................| 000000C0 9F A0 A1 A2 A3 A4 A5 A6 - A7 A8 A9 AA AB AC AD AE |................| 000000D0 AF B0 B1 B2 B3 B4 B5 B6 - B7 B8 B9 BA BB BC BD BE |................| 000000E0 BF C0 C1 C2 C3 C4 C5 C6 - C7 C8 C9 CA CB CC CD CE |................| 000000F0 CF D0 D1 D2 D3 D4 D5 D6 - D7 D8 D9 DA DB DC DD DE |................| 00000100 DF E0 E1 E2 E3 E4 E5 E6 - E7 E8 E9 EA EB EC ED EE |................| 00000110 EF F0 F1 F2 F3 F4 F5 F6 - F7 F8 F9 FA FB FC FD FE |................| 00000120 FF 7A 0A - |.z.| got: 00000000 48 65 6C 6C 6F 2C 20 57 - 6F 72 6C 64 21 5C 0D 0A |Hello, World!\..| 00000010 E3 81 93 E3 82 93 E3 81 - AB E3 81 A1 E3 81 AF EF |................| 00000020 BC 81 0D 0A 01 02 03 04 - 05 06 07 08 09 0D 0A 0B |................| 00000030 0C 0D 0E 0F 10 11 12 13 - 14 15 16 17 18 19 1A 1B |................| 00000040 1C 1D 1E 1F 20 21 22 23 - 24 25 26 27 28 29 2A 2B |.... !"#$%&'()*+| 00000050 2C 2D 2E 2F 30 31 32 33 - 34 35 36 37 38 39 3A 3B |,-./0123456789:;| 00000060 3C 3D 3E 3F 40 41 42 43 - 44 45 46 47 48 49 4A 4B |<=>?@ABCDEFGHIJK| 00000070 4C 4D 4E 4F 50 51 52 53 - 54 55 56 57 58 59 5A 5B |LMNOPQRSTUVWXYZ[| 00000080 5C 5D 5E 5F 60 61 62 63 - 64 65 66 67 68 69 6A 6B |\]^_`abcdefghijk| 00000090 6C 6D 6E 6F 70 71 72 73 - 74 75 76 77 78 79 7A 7B |lmnopqrstuvwxyz{| 000000A0 7C 7D 7E 7F 80 81 82 83 - 84 85 86 87 88 89 8A 8B ||}~.............| 000000B0 8C 8D 8E 8F 90 91 92 93 - 94 95 96 97 98 99 9A 9B |................| 000000C0 9C 9D 9E 9F A0 A1 A2 A3 - A4 A5 A6 A7 A8 A9 AA AB |................| 000000D0 AC AD AE AF B0 B1 B2 B3 - B4 B5 B6 B7 B8 B9 BA BB |................| 000000E0 BC BD BE BF C0 C1 C2 C3 - C4 C5 C6 C7 C8 C9 CA CB |................| 000000F0 CC CD CE CF D0 D1 D2 D3 - D4 D5 D6 D7 D8 D9 DA DB |................| 00000100 DC DD DE DF E0 E1 E2 E3 - E4 E5 E6 E7 E8 E9 EA EB |................| 00000110 EC ED EE EF F0 F1 F2 F3 - F4 F5 F6 F7 F8 F9 FA FB |................| 00000120 FC FD FE FF 7A 0D 0A - |....z..| FAIL ./check.t:integer-base-one-3Ws Description: some sample code for hexdumping Unicode not NUL safe; input lines must be NL terminated unexpected stdout - first difference: line 2, char 46 (wanted 'A', got 'D' wanted: 00000000 0048 0065 006C 006C - 006F 002C 0020 0057 |Hello, W| 00000008 006F 0072 006C 0064 - 0021 005C 000A 3053 |orld!\.こ| 00000010 3093 306B 3061 306F - FF01 000A 0001 0002 |んにちは!...| 00000018 0003 0004 0005 0006 - 0007 0008 0009 000A |........| 00000020 000B 000C 000D 000E - 000F 0010 0011 0012 |........| 00000028 0013 0014 0015 0016 - 0017 0018 0019 001A |........| 00000030 001B 001C 001D 001E - 001F 0020 0021 0022 |..... !"| 00000038 0023 0024 0025 0026 - 0027 0028 0029 002A |#$%&'()*| 00000040 002B 002C 002D 002E - 002F 0030 0031 0032 |+,-./012| 00000048 0033 0034 0035 0036 - 0037 0038 0039 003A |3456789:| 00000050 003B 003C 003D 003E - 003F 0040 0041 0042 |;<=>?@AB| 00000058 0043 0044 0045 0046 - 0047 0048 0049 004A |CDEFGHIJ| 00000060 004B 004C 004D 004E - 004F 0050 0051 0052 |KLMNOPQR| 00000068 0053 0054 0055 0056 - 0057 0058 0059 005A |STUVWXYZ| 00000070 005B 005C 005D 005E - 005F 0060 0061 0062 |[\]^_`ab| 00000078 0063 0064 0065 0066 - 0067 0068 0069 006A |cdefghij| 00000080 006B 006C 006D 006E - 006F 0070 0071 0072 |klmnopqr| 00000088 0073 0074 0075 0076 - 0077 0078 0079 007A |stuvwxyz| 00000090 007B 007C 007D 007E - 007F 0080 0081 0082 |{|}~....| 00000098 0083 0084 0085 0086 - 0087 0088 0089 008A |........| 000000A0 008B 008C 008D 008E - 008F 0090 0091 0092 |........| 000000A8 0093 0094 0095 0096 - 0097 0098 0099 009A |........| 000000B0 009B 009C 009D 009E - 009F 00A0 00A1 00A2 |..... ¡¢| 000000B8 00A3 00A4 00A5 00A6 - 00A7 00A8 00A9 00AA |£¤¥¦§¨©ª| 000000C0 00AB 00AC 00AD 00AE - 00AF 00B0 00B1 00B2 |«¬­®¯°±²| 000000C8 00B3 00B4 00B5 00B6 - 00B7 00B8 00B9 00BA |³´µ¶·¸¹º| 000000D0 00BB 00BC 00BD 00BE - 00BF 00C0 00C1 00C2 |»¼½¾¿ÀÁÂ| 000000D8 00C3 00C4 00C5 00C6 - 00C7 00C8 00C9 00CA |ÃÄÅÆÇÈÉÊ| 000000E0 00CB 00CC 00CD 00CE - 00CF 00D0 00D1 00D2 |ËÌÍÎÏÐÑÒ| 000000E8 00D3 00D4 00D5 00D6 - 00D7 00D8 00D9 00DA |ÓÔÕÖ×ØÙÚ| 000000F0 00DB 00DC 00DD 00DE - 00DF 00E0 00E1 00E2 |ÛÜÝÞßàáâ| 000000F8 00E3 00E4 00E5 00E6 - 00E7 00E8 00E9 00EA |ãäåæçèéê| 00000100 00EB 00EC 00ED 00EE - 00EF 00F0 00F1 00F2 |ëìíîïðñò| 00000108 00F3 00F4 00F5 00F6 - 00F7 00F8 00F9 00FA |óôõö÷øùú| 00000110 00FB 00FC 00FD 00FE - 00FF 000A EFFF 000A |ûüýþÿ.�.| 00000118 EFC2 000A EFEF EFBF - EFC0 000A EFC0 EF80 |�.���.��| 00000120 000A EFE0 EF80 EF80 - 000A FFFD EFEF EFBF |.���.���| 00000128 EFBE EFEF EFBF EFBF - 000A 007A 000A |����.z.| got: 00000000 0048 0065 006C 006C - 006F 002C 0020 0057 |Hello, W| 00000008 006F 0072 006C 0064 - 0021 005C 000D 000A |orld!\..| 00000010 3053 3093 306B 3061 - 306F FF01 000D 000A |こんにちは!..| 00000018 0001 0002 0003 0004 - 0005 0006 0007 0008 |........| 00000020 0009 000D 000A 000B - 000C 000D 000E 000F |........| 00000028 0010 0011 0012 0013 - 0014 0015 0016 0017 |........| 00000030 0018 0019 001A 001B - 001C 001D 001E 001F |........| 00000038 0020 0021 0022 0023 - 0024 0025 0026 0027 | !"#$%&'| 00000040 0028 0029 002A 002B - 002C 002D 002E 002F |()*+,-./| 00000048 0030 0031 0032 0033 - 0034 0035 0036 0037 |01234567| 00000050 0038 0039 003A 003B - 003C 003D 003E 003F |89:;<=>?| 00000058 0040 0041 0042 0043 - 0044 0045 0046 0047 |@ABCDEFG| 00000060 0048 0049 004A 004B - 004C 004D 004E 004F |HIJKLMNO| 00000068 0050 0051 0052 0053 - 0054 0055 0056 0057 |PQRSTUVW| 00000070 0058 0059 005A 005B - 005C 005D 005E 005F |XYZ[\]^_| 00000078 0060 0061 0062 0063 - 0064 0065 0066 0067 |`abcdefg| 00000080 0068 0069 006A 006B - 006C 006D 006E 006F |hijklmno| 00000088 0070 0071 0072 0073 - 0074 0075 0076 0077 |pqrstuvw| 00000090 0078 0079 007A 007B - 007C 007D 007E 007F |xyz{|}~.| 00000098 0080 0081 0082 0083 - 0084 0085 0086 0087 |........| 000000A0 0088 0089 008A 008B - 008C 008D 008E 008F |........| 000000A8 0090 0091 0092 0093 - 0094 0095 0096 0097 |........| 000000B0 0098 0099 009A 009B - 009C 009D 009E 009F |........| 000000B8 00A0 00A1 00A2 00A3 - 00A4 00A5 00A6 00A7 | ¡¢£¤¥¦§| 000000C0 00A8 00A9 00AA 00AB - 00AC 00AD 00AE 00AF |¨©ª«¬­®¯| 000000C8 00B0 00B1 00B2 00B3 - 00B4 00B5 00B6 00B7 |°±²³´µ¶·| 000000D0 00B8 00B9 00BA 00BB - 00BC 00BD 00BE 00BF |¸¹º»¼½¾¿| 000000D8 00C0 00C1 00C2 00C3 - 00C4 00C5 00C6 00C7 |ÀÁÂÃÄÅÆÇ| 000000E0 00C8 00C9 00CA 00CB - 00CC 00CD 00CE 00CF |ÈÉÊËÌÍÎÏ| 000000E8 00D0 00D1 00D2 00D3 - 00D4 00D5 00D6 00D7 |ÐÑÒÓÔÕÖ×| 000000F0 00D8 00D9 00DA 00DB - 00DC 00DD 00DE 00DF |ØÙÚÛÜÝÞß| 000000F8 00E0 00E1 00E2 00E3 - 00E4 00E5 00E6 00E7 |àáâãäåæç| 00000100 00E8 00E9 00EA 00EB - 00EC 00ED 00EE 00EF |èéêëìíîï| 00000108 00F0 00F1 00F2 00F3 - 00F4 00F5 00F6 00F7 |ðñòóôõö÷| 00000110 00F8 00F9 00FA 00FB - 00FC 00FD 00FE 00FF |øùúûüýþÿ| 00000118 000D 000A EFFF 000D - 000A EFC2 000D 000A |..�..�..| 00000120 EFEF EFBF EFC0 000D - 000A EFC0 EF80 000D |���..��.| 00000128 000A EFE0 EF80 EF80 - 000D 000A FFFD EFEF |.���..��| 00000130 EFBF EFBE EFEF EFBF - EFBF 000D 000A 007A |�����..z| 00000138 000D 000A - |..| FAIL ./check.t:integer-base-one-3Ar Description: some sample code for hexdumping; NUL and binary safe unexpected stdout - got too little output wanted: 00000000 48 65 6C 6C 6F 2C 20 57 - 6F 72 6C 64 21 5C 0A E3 |Hello, World!\..| 00000010 81 93 E3 82 93 E3 81 AB - E3 81 A1 E3 81 AF EF BC |................| 00000020 81 0A 01 02 03 04 05 06 - 07 08 09 0A 0B 0C 0D 0E |................| 00000030 0F 10 11 12 13 14 15 16 - 17 18 19 1A 1B 1C 1D 1E |................| 00000040 1F 20 21 22 23 24 25 26 - 27 28 29 2A 2B 2C 2D 2E |. !"#$%&'()*+,-.| 00000050 2F 30 31 32 33 34 35 36 - 37 38 39 3A 3B 3C 3D 3E |/0123456789:;<=>| 00000060 3F 40 41 42 43 44 45 46 - 47 48 49 4A 4B 4C 4D 4E |?@ABCDEFGHIJKLMN| 00000070 4F 50 51 52 53 54 55 56 - 57 58 59 5A 5B 5C 5D 5E |OPQRSTUVWXYZ[\]^| 00000080 5F 60 61 62 63 64 65 66 - 67 68 69 6A 6B 6C 6D 6E |_`abcdefghijklmn| 00000090 6F 70 71 72 73 74 75 76 - 77 78 79 7A 7B 7C 7D 7E |opqrstuvwxyz{|}~| 000000A0 7F 80 81 82 83 84 85 86 - 87 88 89 8A 8B 8C 8D 8E |................| 000000B0 8F 90 91 92 93 94 95 96 - 97 98 99 9A 9B 9C 9D 9E |................| 000000C0 9F A0 A1 A2 A3 A4 A5 A6 - A7 A8 A9 AA AB AC AD AE |................| 000000D0 AF B0 B1 B2 B3 B4 B5 B6 - B7 B8 B9 BA BB BC BD BE |................| 000000E0 BF C0 C1 C2 C3 C4 C5 C6 - C7 C8 C9 CA CB CC CD CE |................| 000000F0 CF D0 D1 D2 D3 D4 D5 D6 - D7 D8 D9 DA DB DC DD DE |................| 00000100 DF E0 E1 E2 E3 E4 E5 E6 - E7 E8 E9 EA EB EC ED EE |................| 00000110 EF F0 F1 F2 F3 F4 F5 F6 - F7 F8 F9 FA FB FC FD FE |................| 00000120 FF 00 7A 0A - |..z.| got nothing unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [39]: read: -a: unknown option FAIL ./check.t:integer-base-one-3Wr Description: some sample code for hexdumping Unicode; NUL and binary safe unexpected stdout - got too little output wanted: 00000000 0048 0065 006C 006C - 006F 002C 0020 0057 |Hello, W| 00000008 006F 0072 006C 0064 - 0021 005C 000A 3053 |orld!\.こ| 00000010 3093 306B 3061 306F - FF01 000A 0001 0002 |んにちは!...| 00000018 0003 0004 0005 0006 - 0007 0008 0009 000A |........| 00000020 000B 000C 000D 000E - 000F 0010 0011 0012 |........| 00000028 0013 0014 0015 0016 - 0017 0018 0019 001A |........| 00000030 001B 001C 001D 001E - 001F 0020 0021 0022 |..... !"| 00000038 0023 0024 0025 0026 - 0027 0028 0029 002A |#$%&'()*| 00000040 002B 002C 002D 002E - 002F 0030 0031 0032 |+,-./012| 00000048 0033 0034 0035 0036 - 0037 0038 0039 003A |3456789:| 00000050 003B 003C 003D 003E - 003F 0040 0041 0042 |;<=>?@AB| 00000058 0043 0044 0045 0046 - 0047 0048 0049 004A |CDEFGHIJ| 00000060 004B 004C 004D 004E - 004F 0050 0051 0052 |KLMNOPQR| 00000068 0053 0054 0055 0056 - 0057 0058 0059 005A |STUVWXYZ| 00000070 005B 005C 005D 005E - 005F 0060 0061 0062 |[\]^_`ab| 00000078 0063 0064 0065 0066 - 0067 0068 0069 006A |cdefghij| 00000080 006B 006C 006D 006E - 006F 0070 0071 0072 |klmnopqr| 00000088 0073 0074 0075 0076 - 0077 0078 0079 007A |stuvwxyz| 00000090 007B 007C 007D 007E - 007F 0080 0081 0082 |{|}~....| 00000098 0083 0084 0085 0086 - 0087 0088 0089 008A |........| 000000A0 008B 008C 008D 008E - 008F 0090 0091 0092 |........| 000000A8 0093 0094 0095 0096 - 0097 0098 0099 009A |........| 000000B0 009B 009C 009D 009E - 009F 00A0 00A1 00A2 |..... ¡¢| 000000B8 00A3 00A4 00A5 00A6 - 00A7 00A8 00A9 00AA |£¤¥¦§¨©ª| 000000C0 00AB 00AC 00AD 00AE - 00AF 00B0 00B1 00B2 |«¬­®¯°±²| 000000C8 00B3 00B4 00B5 00B6 - 00B7 00B8 00B9 00BA |³´µ¶·¸¹º| 000000D0 00BB 00BC 00BD 00BE - 00BF 00C0 00C1 00C2 |»¼½¾¿ÀÁÂ| 000000D8 00C3 00C4 00C5 00C6 - 00C7 00C8 00C9 00CA |ÃÄÅÆÇÈÉÊ| 000000E0 00CB 00CC 00CD 00CE - 00CF 00D0 00D1 00D2 |ËÌÍÎÏÐÑÒ| 000000E8 00D3 00D4 00D5 00D6 - 00D7 00D8 00D9 00DA |ÓÔÕÖ×ØÙÚ| 000000F0 00DB 00DC 00DD 00DE - 00DF 00E0 00E1 00E2 |ÛÜÝÞßàáâ| 000000F8 00E3 00E4 00E5 00E6 - 00E7 00E8 00E9 00EA |ãäåæçèéê| 00000100 00EB 00EC 00ED 00EE - 00EF 00F0 00F1 00F2 |ëìíîïðñò| 00000108 00F3 00F4 00F5 00F6 - 00F7 00F8 00F9 00FA |óôõö÷øùú| 00000110 00FB 00FC 00FD 00FE - 00FF 000A EFFF 000A |ûüýþÿ.�.| 00000118 EFC2 000A EFEF EFBF - EFC0 000A EFC0 EF80 |�.���.��| 00000120 000A EFE0 EF80 EF80 - 000A FFFD EFEF EFBF |.���.���| 00000128 EFBE EFEF EFBF EFBF - 000A 0000 007A 000A |����..z.| got nothing unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [55]: read: -a: unknown option pass ./check.t:integer-base-one-4 FAIL ./check.t:integer-base-one-5A Description: Check to see that we’re NUL and Unicode safe unexpected stdout - first difference: line 1, char 1 (wanted '1', got '.' wanted: 16#61 16#0 16#62 16#FD 16#7A . got: . unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [3]: read: -a: unknown option FAIL ./check.t:integer-base-one-5W Description: Check to see that we’re NUL and Unicode safe unexpected stdout - first difference: line 1, char 1 (wanted '1', got '.' wanted: 16#61 16#0 16#62 16#20AC 16#63 . got: . unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [3]: read: -a: unknown option pass ./check.t:ulimit-1 pass ./check.t:bashiop-1 pass ./check.t:bashiop-2a pass ./check.t:bashiop-2b pass ./check.t:bashiop-2c FAIL ./check.t:bashiop-3a Description: Check if GNU bash-like I/O redirection fails correctly Part 1: this is also supported by GNU bash unexpected stderr - wanted pattern: /.*: can't (create|overwrite) .*/ got: d:/gnuwin32/home/mksh/mksh.exe: [9]: cannot create foo: File exists pass ./check.t:bashiop-3b pass ./check.t:bashiop-4 pass ./check.t:mkshiop-1 pass ./check.t:mkshiop-2 pass ./check.t:oksh-shcrash pass ./check.t:oksh-varfunction-mod1 pass ./check.t:fd-cloexec-1 pass ./check.t:fd-cloexec-2 FAIL ./check.t:comsub-1a Description: COMSUB are now parsed recursively, so this works see also regression-6: matching parenthesēs bug Fails on: pdksh bash2 bash3 zsh Passes on: bash4 ksh93 mksh(20110313+) unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: 1 yes . 2 yes . 3 234 . 4 678 . 5 1 . 6 1 . got: 1 yes . unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [2]: syntax error: ';;' unexpected FAIL ./check.t:comsub-1b Description: COMSUB are now parsed recursively, so this works Fails on: pdksh bash2 bash3 bash4 zsh Passes on: ksh93 mksh(20110313+) unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: 1 11 . 2 21 . 3 1 . 4 1 . 5 11 . 6 21 . got: 1 11 . unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [2]: syntax error: ')' unexpected FAIL ./check.t:comsub-2 Description: RedHat BZ#496791 – another case of missing recursion in parsing COMSUB expressions Fails on: pdksh bash2 bash3¹ bash4¹ zsh Passes on: ksh93 mksh(20110305+) ① bash[34] seem to choke on comment ending with backslash-newline unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: yes got nothing unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [7]: no closing quote pass ./check.t:comsub-3 FAIL ./check.t:comsub-4 Description: Check the tree dump functions for !MKSH_SMALL functionality unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: x() { case $1 in (u) echo x ;| (*) echo $1 ;; esac } got nothing unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [1]: syntax error: '&' unexpected FAIL ./check.t:comsub-5 Description: Check COMSUB works with aliases (does not expand them twice) unexpected stdout - first difference: line 3, char 1 (wanted '\t', got ' ' wanted: a b foo() { ./pfn "$(echo foo )" } got: a b foo() { ./pfn "$(echo foo)" } FAIL ./check.t:comsub-torture Description: Check the tree dump functions work correctly unexpected stdout - got too little output wanted: inline_TCOM() { vara=1 varb='2 3' cmd arg1 $arg2 "$arg3 4" } inline_TCOM() { vara=1 varb="2 3" cmd arg1 $arg2 "$arg3 4" } function comsub_TCOM { x=$( vara=1 varb='2 3' cmd arg1 $arg2 "$arg3 4" ); } function comsub_TCOM { x=$(vara=1 varb="2 3" cmd arg1 $arg2 "$arg3 4" ) } function reread_TCOM { x=$(( vara=1 varb='2 3' cmd arg1 $arg2 "$arg3 4" )|tr u x); } function reread_TCOM { x=$(( vara=1 varb="2 3" cmd arg1 $arg2 "$arg3 4" ) | tr u x ) } inline_TPAREN_TPIPE_TLIST() { (echo $foo | tr -dc 0-9; echo) } inline_TPAREN_TPIPE_TLIST() { ( echo $foo | tr -dc 0-9 echo ) } function comsub_TPAREN_TPIPE_TLIST { x=$( (echo $foo | tr -dc 0-9; echo) ); } function comsub_TPAREN_TPIPE_TLIST { x=$(( echo $foo | tr -dc 0-9 ; echo ) ) } function reread_TPAREN_TPIPE_TLIST { x=$(( (echo $foo | tr -dc 0-9; echo) )|tr u x); } function reread_TPAREN_TPIPE_TLIST { x=$(( ( echo $foo | tr -dc 0-9 ; echo ) ) | tr u x ) } inline_TAND_TOR() { cmd && echo ja || echo nein } inline_TAND_TOR() { cmd && echo ja || echo nein } function comsub_TAND_TOR { x=$( cmd && echo ja || echo nein ); } function comsub_TAND_TOR { x=$(cmd && echo ja || echo nein ) } function reread_TAND_TOR { x=$(( cmd && echo ja || echo nein )|tr u x); } function reread_TAND_TOR { x=$(( cmd && echo ja || echo nein ) | tr u x ) } inline_TSELECT() { select file in *; do echo "<$file>" ; break ; done } inline_TSELECT() { select file in * do echo "<$file>" break done } function comsub_TSELECT { x=$( select file in *; do echo "<$file>" ; break ; done ); } function comsub_TSELECT { x=$(select file in * ; do echo "<$file>" ; break ; done ) } function reread_TSELECT { x=$(( select file in *; do echo "<$file>" ; break ; done )|tr u x); } function reread_TSELECT { x=$(( select file in * ; do echo "<$file>" ; break ; done ) | tr u x ) } inline_TFOR_TTIME() { time for i in {1,2,3} ; do echo $i ; done } inline_TFOR_TTIME() { time for i in {1,2,3} do echo $i done } function comsub_TFOR_TTIME { x=$( time for i in {1,2,3} ; do echo $i ; done ); } function comsub_TFOR_TTIME { x=$(time for i in {1,2,3} ; do echo $i ; done ) } function reread_TFOR_TTIME { x=$(( time for i in {1,2,3} ; do echo $i ; done )|tr u x); } function reread_TFOR_TTIME { x=$(( time for i in {1,2,3} ; do echo $i ; done ) | tr u x ) } inline_TCASE() { case $foo in 1) echo eins;& 2) echo zwei ;| *) echo kann net bis drei zählen;; esac } inline_TCASE() { case $foo in (1) echo eins ;& (2) echo zwei ;| (*) echo kann net bis drei zählen ;; esac } function comsub_TCASE { x=$( case $foo in 1) echo eins;& 2) echo zwei ;| *) echo kann net bis drei zählen;; esac ); } function comsub_TCASE { x=$(case $foo in (1) echo eins ;& (2) echo zwei ;| (*) echo kann net bis drei zählen ;; esac ) } function reread_TCASE { x=$(( case $foo in 1) echo eins;& 2) echo zwei ;| *) echo kann net bis drei zählen;; esac )|tr u x); } function reread_TCASE { x=$(( case $foo in (1) echo eins ;& (2) echo zwei ;| (*) echo kann net bis drei zählen ;; esac ) | tr u x ) } inline_TIF_TBANG_TDBRACKET_TELIF() { if ! [[ 1 = 1 ]] ; then echo eins; elif [[ 1 = 2 ]]; then echo zwei ;else echo drei; fi } inline_TIF_TBANG_TDBRACKET_TELIF() { if ! [[ 1 = 1 ]] then echo eins elif [[ 1 = 2 ]] then echo zwei else echo drei fi } function comsub_TIF_TBANG_TDBRACKET_TELIF { x=$( if ! [[ 1 = 1 ]] ; then echo eins; elif [[ 1 = 2 ]]; then echo zwei ;else echo drei; fi ); } function comsub_TIF_TBANG_TDBRACKET_TELIF { x=$(if ! [[ 1 = 1 ]] ; then echo eins ; elif [[ 1 = 2 ]] ; then echo zwei ; else echo drei ; fi ) } function reread_TIF_TBANG_TDBRACKET_TELIF { x=$(( if ! [[ 1 = 1 ]] ; then echo eins; elif [[ 1 = 2 ]]; then echo zwei ;else echo drei; fi )|tr u x); } function reread_TIF_TBANG_TDBRACKET_TELIF { x=$(( if ! [[ 1 = 1 ]] ; then echo eins ; elif [[ 1 = 2 ]] ; then echo zwei ; else echo drei ; fi ) | tr u x ) } inline_TWHILE() { i=1; while (( i < 10 )); do echo $i; let ++i; done } inline_TWHILE() { i=1 while let " i < 10 " do echo $i let ++i done } function comsub_TWHILE { x=$( i=1; while (( i < 10 )); do echo $i; let ++i; done ); } function comsub_TWHILE { x=$(i=1 ; while let " i < 10 " ; do echo $i ; let ++i ; done ) } function reread_TWHILE { x=$(( i=1; while (( i < 10 )); do echo $i; let ++i; done )|tr u x); } function reread_TWHILE { x=$(( i=1 ; while let " i < 10 " ; do echo $i ; let ++i ; done ) | tr u x ) } inline_TUNTIL() { i=10; until (( !--i )) ; do echo $i; done } inline_TUNTIL() { i=10 until let " !--i " do echo $i done } function comsub_TUNTIL { x=$( i=10; until (( !--i )) ; do echo $i; done ); } function comsub_TUNTIL { x=$(i=10 ; until let " !--i " ; do echo $i ; done ) } function reread_TUNTIL { x=$(( i=10; until (( !--i )) ; do echo $i; done )|tr u x); } function reread_TUNTIL { x=$(( i=10 ; until let " !--i " ; do echo $i ; done ) | tr u x ) } inline_TCOPROC() { cat * |& ls } inline_TCOPROC() { cat * |& ls } function comsub_TCOPROC { x=$( cat * |& ls ); } function comsub_TCOPROC { x=$(cat * |& ls ) } function reread_TCOPROC { x=$(( cat * |& ls )|tr u x); } function reread_TCOPROC { x=$(( cat * |& ls ) | tr u x ) } inline_TFUNCT_TBRACE_TASYNC() { function korn { echo eins; echo zwei ; } bourne () { logger * & } } inline_TFUNCT_TBRACE_TASYNC() { function korn { echo eins echo zwei } bourne() { logger * & } } function comsub_TFUNCT_TBRACE_TASYNC { x=$( function korn { echo eins; echo zwei ; } bourne () { logger * & } ); } function comsub_TFUNCT_TBRACE_TASYNC { x=$(function korn { echo eins ; echo zwei ; } ; bourne() { logger * & } ) } function reread_TFUNCT_TBRACE_TASYNC { x=$(( function korn { echo eins; echo zwei ; } bourne () { logger * & } )|tr u x); } function reread_TFUNCT_TBRACE_TASYNC { x=$(( function korn { echo eins ; echo zwei ; } ; bourne() { logger * & } ) | tr u x ) } inline_IOREAD_IOCAT() { tr x u 0>bar } inline_IOREAD_IOCAT() { tr x u >bar } function comsub_IOREAD_IOCAT { x=$( tr x u 0>bar ); } function comsub_IOREAD_IOCAT { x=$(tr x u >bar ) } function reread_IOREAD_IOCAT { x=$(( tr x u 0>bar )|tr u x); } function reread_IOREAD_IOCAT { x=$(( tr x u >bar ) | tr u x ) } inline_IOWRITE_IOCLOB_IOHERE_noIOSKIP() { cat >|bar <<'EOFN' foo EOFN } inline_IOWRITE_IOCLOB_IOHERE_noIOSKIP() { cat >|bar <<"EOFN" foo EOFN } function comsub_IOWRITE_IOCLOB_IOHERE_noIOSKIP { x=$( cat >|bar <<'EOFN' foo EOFN ); } function comsub_IOWRITE_IOCLOB_IOHERE_noIOSKIP { x=$(cat >|bar <<"EOFN" foo EOFN ) } function reread_IOWRITE_IOCLOB_IOHERE_noIOSKIP { x=$(( cat >|bar <<'EOFN' foo EOFN )|tr u x); } function reread_IOWRITE_IOCLOB_IOHERE_noIOSKIP { x=$(( cat >|bar <<"EOFN" foo EOFN ) | tr u x ) } inline_IOWRITE_noIOCLOB_IOHERE_IOSKIP() { cat 1>bar <<-EOFI foo EOFI } inline_IOWRITE_noIOCLOB_IOHERE_IOSKIP() { cat >bar <<-EOFI foo EOFI } function comsub_IOWRITE_noIOCLOB_IOHERE_IOSKIP { x=$( cat 1>bar <<-EOFI foo EOFI ); } function comsub_IOWRITE_noIOCLOB_IOHERE_IOSKIP { x=$(cat >bar <<-EOFI foo EOFI ) } function reread_IOWRITE_noIOCLOB_IOHERE_IOSKIP { x=$(( cat 1>bar <<-EOFI foo EOFI )|tr u x); } function reread_IOWRITE_noIOCLOB_IOHERE_IOSKIP { x=$(( cat >bar <<-EOFI foo EOFI ) | tr u x ) } inline_IORDWR_IODUP() { sh 1<>/dev/console 0<&1 2>&1 } inline_IORDWR_IODUP() { sh 1<>/dev/console <&1 2>&1 } function comsub_IORDWR_IODUP { x=$( sh 1<>/dev/console 0<&1 2>&1 ); } function comsub_IORDWR_IODUP { x=$(sh 1<>/dev/console <&1 2>&1 ) } function reread_IORDWR_IODUP { x=$(( sh 1<>/dev/console 0<&1 2>&1 )|tr u x); } function reread_IORDWR_IODUP { x=$(( sh 1<>/dev/console <&1 2>&1 ) | tr u x ) } inline_COMSUB_EXPRSUB() { echo $(true) $((1+ 2)) } inline_COMSUB_EXPRSUB() { echo $(true ) $((1+ 2)) } function comsub_COMSUB_EXPRSUB { x=$( echo $(true) $((1+ 2)) ); } function comsub_COMSUB_EXPRSUB { x=$(echo $(true ) $((1+ 2)) ) } function reread_COMSUB_EXPRSUB { x=$(( echo $(true) $((1+ 2)) )|tr u x); } function reread_COMSUB_EXPRSUB { x=$(( echo $(true ) $((1+ 2)) ) | tr u x ) } inline_QCHAR_OQUOTE_CQUOTE() { echo fo\ob\"a\`r\'b\$az echo "fo\ob\"a\`r\'b\$az" echo 'fo\ob\"a\`r'\''b\$az' } inline_QCHAR_OQUOTE_CQUOTE() { echo fo\ob\"a\`r\'b\$az echo "fo\ob\"a\`r\'b\$az" echo "fo\\ob\\\"a\\\`r"\'"b\\\$az" } function comsub_QCHAR_OQUOTE_CQUOTE { x=$( echo fo\ob\"a\`r\'b\$az echo "fo\ob\"a\`r\'b\$az" echo 'fo\ob\"a\`r'\''b\$az' ); } function comsub_QCHAR_OQUOTE_CQUOTE { x=$(echo fo\ob\"a\`r\'b\$az ; echo "fo\ob\"a\`r\'b\$az" ; echo "fo\\ob\\\"a\\\`r"\'"b\\\$az" ) } function reread_QCHAR_OQUOTE_CQUOTE { x=$(( echo fo\ob\"a\`r\'b\$az echo "fo\ob\"a\`r\'b\$az" echo 'fo\ob\"a\`r'\''b\$az' )|tr u x); } function reread_QCHAR_OQUOTE_CQUOTE { x=$(( echo fo\ob\"a\`r\'b\$az ; echo "fo\ob\"a\`r\'b\$az" ; echo "fo\\ob\\\"a\\\`r"\'"b\\\$az" ) | tr u x ) } inline_OSUBST_CSUBST_OPAT_SPAT_CPAT() { [[ ${foo#bl\(u\)b} = @(bar|baz) ]] } inline_OSUBST_CSUBST_OPAT_SPAT_CPAT() { [[ ${foo#bl\(u\)b} = @(bar|baz) ]] } function comsub_OSUBST_CSUBST_OPAT_SPAT_CPAT { x=$( [[ ${foo#bl\(u\)b} = @(bar|baz) ]] ); } function comsub_OSUBST_CSUBST_OPAT_SPAT_CPAT { x=$([[ ${foo#bl\(u\)b} = @(bar|baz) ]] ) } function reread_OSUBST_CSUBST_OPAT_SPAT_CPAT { x=$(( [[ ${foo#bl\(u\)b} = @(bar|baz) ]] )|tr u x); } function reread_OSUBST_CSUBST_OPAT_SPAT_CPAT { x=$(( [[ ${foo#bl\(u\)b} = @(bar|baz) ]] ) | tr u x ) } inline_heredoc_closed() { x=$(cat <&1 <<-EOF 1,/^\$/d 0a $x . wq EOF)" = @(?) ]] && rm -f /etc/motd if [[ ! -s /etc/motd ]]; then install -c -o root -g wheel -m 664 /dev/null /etc/motd print -- "$x\n" >/etc/motd fi } inline_patch_motd() { x=$(sysctl -n kern.version | sed 1q ) [[ -s /etc/motd && "$([[ "$(head -1 /etc/motd )" != $x ]] && ed -s /etc/motd 2>&1 <<-EOF 1,/^\$/d 0a $x . wq EOF )" = @(?) ]] && rm -f /etc/motd if [[ ! -s /etc/motd ]] then install -c -o root -g wheel -m 664 /dev/null /etc/motd print -- "$x\n" >/etc/motd fi } function comsub_patch_motd { x=$( x=$(sysctl -n kern.version | sed 1q) [[ -s /etc/motd && "$([[ "$(head -1 /etc/motd)" != $x ]] && \ ed -s /etc/motd 2>&1 <<-EOF 1,/^\$/d 0a $x . wq EOF)" = @(?) ]] && rm -f /etc/motd if [[ ! -s /etc/motd ]]; then install -c -o root -g wheel -m 664 /dev/null /etc/motd print -- "$x\n" >/etc/motd fi ); } function comsub_patch_motd { x=$(x=$(sysctl -n kern.version | sed 1q ) ; [[ -s /etc/motd && "$([[ "$(head -1 /etc/motd )" != $x ]] && ed -s /etc/motd 2>&1 <<-EOF 1,/^\$/d 0a $x . wq EOF )" = @(?) ]] && rm -f /etc/motd ; if [[ ! -s /etc/motd ]] ; then install -c -o root -g wheel -m 664 /dev/null /etc/motd ; print -- "$x\n" >/etc/motd ; fi ) } function reread_patch_motd { x=$(( x=$(sysctl -n kern.version | sed 1q) [[ -s /etc/motd && "$([[ "$(head -1 /etc/motd)" != $x ]] && \ ed -s /etc/motd 2>&1 <<-EOF 1,/^\$/d 0a $x . wq EOF)" = @(?) ]] && rm -f /etc/motd if [[ ! -s /etc/motd ]]; then install -c -o root -g wheel -m 664 /dev/null /etc/motd print -- "$x\n" >/etc/motd fi )|tr u x); } function reread_patch_motd { x=$(( x=$(sysctl -n kern.version | sed 1q ) ; [[ -s /etc/motd && "$([[ "$(head -1 /etc/motd )" != $x ]] && ed -s /etc/motd 2>&1 <<-EOF 1,/^\$/d 0a $x . wq EOF )" = @(?) ]] && rm -f /etc/motd ; if [[ ! -s /etc/motd ]] ; then install -c -o root -g wheel -m 664 /dev/null /etc/motd ; print -- "$x\n" >/etc/motd ; fi ) | tr u x ) } inline_wdarrassign() { case x in x) a+=b; c+=(d e) esac } inline_wdarrassign() { case x in (x) a+=b set -A c+ -- d e ;; esac } function comsub_wdarrassign { x=$( case x in x) a+=b; c+=(d e) esac ); } function comsub_wdarrassign { x=$(case x in (x) a+=b ; set -A c+ -- d e ;; esac ) } function reread_wdarrassign { x=$(( case x in x) a+=b; c+=(d e) esac )|tr u x); } function reread_wdarrassign { x=$(( case x in (x) a+=b ; set -A c+ -- d e ;; esac ) | tr u x ) } got nothing FAIL ./check.t:comsub-torture-io Description: Check the tree dump functions work correctly with I/O redirection unexpected stdout - got too little output wanted: inline_TCOM() { vara=1 varb='2 3' cmd arg1 $arg2 "$arg3 4" >&3 } inline_TCOM() { vara=1 varb="2 3" cmd arg1 $arg2 "$arg3 4" >&3 } function comsub_TCOM { x=$( vara=1 varb='2 3' cmd arg1 $arg2 "$arg3 4" >&3 ); } function comsub_TCOM { x=$(vara=1 varb="2 3" cmd arg1 $arg2 "$arg3 4" >&3 ) } function reread_TCOM { x=$(( vara=1 varb='2 3' cmd arg1 $arg2 "$arg3 4" >&3 )|tr u x); } function reread_TCOM { x=$(( vara=1 varb="2 3" cmd arg1 $arg2 "$arg3 4" >&3 ) | tr u x ) } inline_TPAREN_TPIPE_TLIST() { (echo $foo | tr -dc 0-9 >&3; echo >&3) >&3 } inline_TPAREN_TPIPE_TLIST() { ( echo $foo | tr -dc 0-9 >&3 echo >&3 ) >&3 } function comsub_TPAREN_TPIPE_TLIST { x=$( (echo $foo | tr -dc 0-9 >&3; echo >&3) >&3 ); } function comsub_TPAREN_TPIPE_TLIST { x=$(( echo $foo | tr -dc 0-9 >&3 ; echo >&3 ) >&3 ) } function reread_TPAREN_TPIPE_TLIST { x=$(( (echo $foo | tr -dc 0-9 >&3; echo >&3) >&3 )|tr u x); } function reread_TPAREN_TPIPE_TLIST { x=$(( ( echo $foo | tr -dc 0-9 >&3 ; echo >&3 ) >&3 ) | tr u x ) } inline_TAND_TOR() { cmd >&3 && >&3 echo ja || echo >&3 nein } inline_TAND_TOR() { cmd >&3 && echo ja >&3 || echo nein >&3 } function comsub_TAND_TOR { x=$( cmd >&3 && >&3 echo ja || echo >&3 nein ); } function comsub_TAND_TOR { x=$(cmd >&3 && echo ja >&3 || echo nein >&3 ) } function reread_TAND_TOR { x=$(( cmd >&3 && >&3 echo ja || echo >&3 nein )|tr u x); } function reread_TAND_TOR { x=$(( cmd >&3 && echo ja >&3 || echo nein >&3 ) | tr u x ) } inline_TSELECT() { select file in *; do echo "<$file>" ; break >&3 ; done >&3 } inline_TSELECT() { select file in * do echo "<$file>" break >&3 done >&3 } function comsub_TSELECT { x=$( select file in *; do echo "<$file>" ; break >&3 ; done >&3 ); } function comsub_TSELECT { x=$(select file in * ; do echo "<$file>" ; break >&3 ; done >&3 ) } function reread_TSELECT { x=$(( select file in *; do echo "<$file>" ; break >&3 ; done >&3 )|tr u x); } function reread_TSELECT { x=$(( select file in * ; do echo "<$file>" ; break >&3 ; done >&3 ) | tr u x ) } inline_TFOR_TTIME() { for i in {1,2,3} ; do time >&3 echo $i ; done >&3 } inline_TFOR_TTIME() { for i in {1,2,3} do time echo $i >&3 done >&3 } function comsub_TFOR_TTIME { x=$( for i in {1,2,3} ; do time >&3 echo $i ; done >&3 ); } function comsub_TFOR_TTIME { x=$(for i in {1,2,3} ; do time echo $i >&3 ; done >&3 ) } function reread_TFOR_TTIME { x=$(( for i in {1,2,3} ; do time >&3 echo $i ; done >&3 )|tr u x); } function reread_TFOR_TTIME { x=$(( for i in {1,2,3} ; do time echo $i >&3 ; done >&3 ) | tr u x ) } inline_TCASE() { case $foo in 1) echo eins >&3;& 2) echo zwei >&3 ;| *) echo kann net bis drei zählen >&3;; esac >&3 } inline_TCASE() { case $foo in (1) echo eins >&3 ;& (2) echo zwei >&3 ;| (*) echo kann net bis drei zählen >&3 ;; esac >&3 } function comsub_TCASE { x=$( case $foo in 1) echo eins >&3;& 2) echo zwei >&3 ;| *) echo kann net bis drei zählen >&3;; esac >&3 ); } function comsub_TCASE { x=$(case $foo in (1) echo eins >&3 ;& (2) echo zwei >&3 ;| (*) echo kann net bis drei zählen >&3 ;; esac >&3 ) } function reread_TCASE { x=$(( case $foo in 1) echo eins >&3;& 2) echo zwei >&3 ;| *) echo kann net bis drei zählen >&3;; esac >&3 )|tr u x); } function reread_TCASE { x=$(( case $foo in (1) echo eins >&3 ;& (2) echo zwei >&3 ;| (*) echo kann net bis drei zählen >&3 ;; esac >&3 ) | tr u x ) } inline_TIF_TBANG_TDBRACKET_TELIF() { if ! [[ 1 = 1 ]] >&3 ; then echo eins; elif [[ 1 = 2 ]] >&3; then echo zwei ;else echo drei; fi >&3 } inline_TIF_TBANG_TDBRACKET_TELIF() { if ! [[ 1 = 1 ]] >&3 then echo eins elif [[ 1 = 2 ]] >&3 then echo zwei else echo drei fi >&3 } function comsub_TIF_TBANG_TDBRACKET_TELIF { x=$( if ! [[ 1 = 1 ]] >&3 ; then echo eins; elif [[ 1 = 2 ]] >&3; then echo zwei ;else echo drei; fi >&3 ); } function comsub_TIF_TBANG_TDBRACKET_TELIF { x=$(if ! [[ 1 = 1 ]] >&3 ; then echo eins ; elif [[ 1 = 2 ]] >&3 ; then echo zwei ; else echo drei ; fi >&3 ) } function reread_TIF_TBANG_TDBRACKET_TELIF { x=$(( if ! [[ 1 = 1 ]] >&3 ; then echo eins; elif [[ 1 = 2 ]] >&3; then echo zwei ;else echo drei; fi >&3 )|tr u x); } function reread_TIF_TBANG_TDBRACKET_TELIF { x=$(( if ! [[ 1 = 1 ]] >&3 ; then echo eins ; elif [[ 1 = 2 ]] >&3 ; then echo zwei ; else echo drei ; fi >&3 ) | tr u x ) } inline_TWHILE() { i=1; while (( i < 10 )) >&3; do echo $i; let ++i; done >&3 } inline_TWHILE() { i=1 while let " i < 10 " >&3 do echo $i let ++i done >&3 } function comsub_TWHILE { x=$( i=1; while (( i < 10 )) >&3; do echo $i; let ++i; done >&3 ); } function comsub_TWHILE { x=$(i=1 ; while let " i < 10 " >&3 ; do echo $i ; let ++i ; done >&3 ) } function reread_TWHILE { x=$(( i=1; while (( i < 10 )) >&3; do echo $i; let ++i; done >&3 )|tr u x); } function reread_TWHILE { x=$(( i=1 ; while let " i < 10 " >&3 ; do echo $i ; let ++i ; done >&3 ) | tr u x ) } inline_TUNTIL() { i=10; until (( !--i )) >&3 ; do echo $i; done >&3 } inline_TUNTIL() { i=10 until let " !--i " >&3 do echo $i done >&3 } function comsub_TUNTIL { x=$( i=10; until (( !--i )) >&3 ; do echo $i; done >&3 ); } function comsub_TUNTIL { x=$(i=10 ; until let " !--i " >&3 ; do echo $i ; done >&3 ) } function reread_TUNTIL { x=$(( i=10; until (( !--i )) >&3 ; do echo $i; done >&3 )|tr u x); } function reread_TUNTIL { x=$(( i=10 ; until let " !--i " >&3 ; do echo $i ; done >&3 ) | tr u x ) } inline_TCOPROC() { cat * >&3 |& >&3 ls } inline_TCOPROC() { cat * >&3 |& ls >&3 } function comsub_TCOPROC { x=$( cat * >&3 |& >&3 ls ); } function comsub_TCOPROC { x=$(cat * >&3 |& ls >&3 ) } function reread_TCOPROC { x=$(( cat * >&3 |& >&3 ls )|tr u x); } function reread_TCOPROC { x=$(( cat * >&3 |& ls >&3 ) | tr u x ) } inline_TFUNCT_TBRACE_TASYNC() { function korn { echo eins; echo >&3 zwei ; } bourne () { logger * >&3 & } } inline_TFUNCT_TBRACE_TASYNC() { function korn { echo eins echo zwei >&3 } bourne() { logger * >&3 & } } function comsub_TFUNCT_TBRACE_TASYNC { x=$( function korn { echo eins; echo >&3 zwei ; } bourne () { logger * >&3 & } ); } function comsub_TFUNCT_TBRACE_TASYNC { x=$(function korn { echo eins ; echo zwei >&3 ; } ; bourne() { logger * >&3 & } ) } function reread_TFUNCT_TBRACE_TASYNC { x=$(( function korn { echo eins; echo >&3 zwei ; } bourne () { logger * >&3 & } )|tr u x); } function reread_TFUNCT_TBRACE_TASYNC { x=$(( function korn { echo eins ; echo zwei >&3 ; } ; bourne() { logger * >&3 & } ) | tr u x ) } inline_COMSUB_EXPRSUB() { echo $(true >&3) $((1+ 2)) } inline_COMSUB_EXPRSUB() { echo $(true >&3 ) $((1+ 2)) } function comsub_COMSUB_EXPRSUB { x=$( echo $(true >&3) $((1+ 2)) ); } function comsub_COMSUB_EXPRSUB { x=$(echo $(true >&3 ) $((1+ 2)) ) } function reread_COMSUB_EXPRSUB { x=$(( echo $(true >&3) $((1+ 2)) )|tr u x); } function reread_COMSUB_EXPRSUB { x=$(( echo $(true >&3 ) $((1+ 2)) ) | tr u x ) } got nothing pass ./check.t:test-stnze-1 pass ./check.t:test-stnze-2 FAIL ./check.t:event-subst-3 Description: Check that '!' substitution in noninteractive mode is ignored unexpected stdout - first difference: line 1, char 1 (wanted 'm', got 'y' wanted: molto bene yeap si meow = 0 foo got: yeap meow = 0 foo unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [2]: falsetto: not found d:/gnuwin32/home/mksh/mksh.exe: [4]: !false: not found FAIL ./check.t:event-subst-0 Description: Check that '!' substitution in interactive mode is ignored unexpected stdout - first difference: line 1, char 1 (wanted 'm', got 'y' wanted: molto bene yeap si meow = 0 foo got: yeap meow = 127 foo FAIL ./check.t:nounset-1 Description: Check that "set -u" matches (future) SUSv4 requirement unexpected stdout - first difference: line 7, char 1 (wanted 'y', got '/' wanted: y =1 y: parameter not set =2 x=nz =3 y: parameter not set =4 0=nz =5 2: parameter not set =6 1: parameter not set =7 at= =8 asterisk= =9 0 =10 !: parameter not set =11 ush =12 0 =14 mypid=nz =15 got: y =1 y: parameter not set =2 x=nz =3 /gnuwin32/home/mksh/mksh.exe: y: parameter not set =4 0=nz =5 /gnuwin32/home/mksh/mksh.exe: 2: parameter not set =6 1: parameter not set =7 at= =8 asterisk= =9 0 =10 !: parameter not set =11 ush =12 0 =14 mypid=nz =15 pass ./check.t:nameref-1 pass ./check.t:nameref-2da pass ./check.t:nameref-3 FAIL ./check.t:nameref-4 Description: Ensure we don't run in an infinite loop test timed out (limit of 3 seconds) unexpected exit status 9 (signal 9), expected 0 unexpected stdout - got too little output wanted: sind bad . blah bar . got: sind bad . pass ./check.t:better-parens-1a pass ./check.t:better-parens-1b pass ./check.t:better-parens-1c pass ./check.t:better-parens-2a pass ./check.t:better-parens-2b pass ./check.t:better-parens-2c pass ./check.t:better-parens-3a pass ./check.t:better-parens-3b pass ./check.t:better-parens-3c pass ./check.t:better-parens-4a pass ./check.t:better-parens-4b pass ./check.t:better-parens-4c pass ./check.t:echo-test-1 pass ./check.t:echo-test-2 pass ./check.t:utilities-getopts-1 pass ./check.t:utilities-getopts-2 pass ./check.t:wcswidth-1 pass ./check.t:wcswidth-2 pass ./check.t:wcswidth-3 pass ./check.t:wcswidth-4a pass ./check.t:wcswidth-4b pass ./check.t:wcswidth-4c FAIL ./check.t:debian-117-1 Description: Check test - bug#465250 unexpected stdout - first difference: line 1, char 1 (wanted '1', got '2' wanted: 1 got: 2 unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [1]: test: missing closing paren FAIL ./check.t:debian-117-2 Description: Check test - bug#465250 unexpected stdout - first difference: line 1, char 1 (wanted '0', got '2' wanted: 0 got: 2 unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [1]: test: missing closing paren pass ./check.t:debian-117-3 pass ./check.t:debian-117-4 FAIL ./check.t:case-zsh Description: Check that zsh case variants work unexpected exit status 256 (exit-code 1), expected 0 unexpected stdout - got too little output wanted: b = b c x = b x got: b = unexpected stderr - got too much output wanted nothing got: d:/gnuwin32/home/mksh/mksh.exe: [9]: syntax error: '&' unexpected Total failed: 89 (3 ignored) (86 unexpected) Total passed: 326