RUN asdl/examples/typed_arith_parse_test.py > _test/py-unit/asdl/examples/typed_arith_parse_test.py.log OK RUN asdl/format_test.py > _test/py-unit/asdl/format_test.py.log OK RUN asdl/front_end_test.py > _test/py-unit/asdl/front_end_test.py.log OK RUN asdl/gen_python_test.py > _test/py-unit/asdl/gen_python_test.py.log OK RUN asdl/target_lang_test.py > _test/py-unit/asdl/target_lang_test.py.log OK RUN benchmarks/uftrace_allocs_test.py > _test/py-unit/benchmarks/uftrace_allocs_test.py.log OK RUN build/dynamic_deps_test.py > _test/py-unit/build/dynamic_deps_test.py.log OK RUN build/ninja_lib_test.py > _test/py-unit/build/ninja_lib_test.py.log OK RUN builtin/bracket_osh_test.py > _test/py-unit/builtin/bracket_osh_test.py.log OK RUN builtin/completion_osh_test.py > _test/py-unit/builtin/completion_osh_test.py.log OK RUN builtin/func_misc_test.py > _test/py-unit/builtin/func_misc_test.py.log OK RUN builtin/misc_osh_test.py > _test/py-unit/builtin/misc_osh_test.py.log OK RUN builtin/read_osh_test.py > _test/py-unit/builtin/read_osh_test.py.log OK RUN builtin/readline_osh_test.py > _test/py-unit/builtin/readline_osh_test.py.log OK RUN core/alloc_test.py > _test/py-unit/core/alloc_test.py.log OK RUN core/comp_ui_test.py > _test/py-unit/core/comp_ui_test.py.log OK RUN core/completion_test.py > _test/py-unit/core/completion_test.py.log OK RUN core/process_test.py > _test/py-unit/core/process_test.py.log OK RUN core/pyutil_test.py > _test/py-unit/core/pyutil_test.py.log OK RUN core/state_test.py > _test/py-unit/core/state_test.py.log OK RUN core/util_test.py > _test/py-unit/core/util_test.py.log OK RUN data_lang/htm8_test.py > _test/py-unit/data_lang/htm8_test.py.log OK RUN data_lang/htm8_util_test.py > _test/py-unit/data_lang/htm8_util_test.py.log OK RUN data_lang/j8_test.py > _test/py-unit/data_lang/j8_test.py.log OK RUN data_lang/pyj8_test.py > _test/py-unit/data_lang/pyj8_test.py.log OK RUN display/pretty_test.py > _test/py-unit/display/pretty_test.py.log OK RUN display/ui_test.py > _test/py-unit/display/ui_test.py.log OK RUN doctools/help_gen_test.py > _test/py-unit/doctools/help_gen_test.py.log OK RUN doctools/html_lib_test.py > _test/py-unit/doctools/html_lib_test.py.log OK RUN doctools/html_old_test.py > _test/py-unit/doctools/html_old_test.py.log OK RUN doctools/oils_doc_test.py > _test/py-unit/doctools/oils_doc_test.py.log OK RUN doctools/spelling_test.py > _test/py-unit/doctools/spelling_test.py.log OK RUN doctools/split_doc_test.py > _test/py-unit/doctools/split_doc_test.py.log OK RUN frontend/args_test.py > _test/py-unit/frontend/args_test.py.log OK RUN frontend/id_kind_def_test.py > _test/py-unit/frontend/id_kind_def_test.py.log OK RUN frontend/lexer_def_test.py > _test/py-unit/frontend/lexer_def_test.py.log OK RUN frontend/lexer_gen_test.py > _test/py-unit/frontend/lexer_gen_test.py.log OK RUN frontend/lexer_test.py > _test/py-unit/frontend/lexer_test.py.log OK RUN frontend/match_test.py > _test/py-unit/frontend/match_test.py.log OK RUN frontend/reader_test.py > _test/py-unit/frontend/reader_test.py.log OK RUN frontend/typed_args_test.py > _test/py-unit/frontend/typed_args_test.py.log OK RUN mycpp/mops_test.py > _test/py-unit/mycpp/mops_test.py.log OK RUN mycpp/mylib_test.py > _test/py-unit/mycpp/mylib_test.py.log OK RUN osh/arith_parse_test.py > _test/py-unit/osh/arith_parse_test.py.log OK RUN osh/bool_parse_test.py > _test/py-unit/osh/bool_parse_test.py.log OK RUN osh/braces_test.py > _test/py-unit/osh/braces_test.py.log OK RUN osh/cmd_eval_test.py > _test/py-unit/osh/cmd_eval_test.py.log OK RUN osh/cmd_parse_test.py > _test/py-unit/osh/cmd_parse_test.py.log === /home/uke/oil/_test/py-unit/osh/cmd_parse_test.py.log === E..(command.CommandList children:[ (command.ShAssignment left:<Lit_VarLike "empty="> pairs:[ (AssignPair left:...0x7f49909aa258 lhs:(sh_lhs.Name left:...0x7f49909aa258 name:empty) op:assign_op.Equal rhs:(w (word_part.InitializerLiteral left:<Op_LParen "("> pairs:[] right:<Right_Initializer ")"> ) ) ) ] ) ] ) (C (w <Lit_Chars ls>) (w <Lit_Chars foo>)) (command.Pipeline children:[ (C (w <Lit_Chars ls>) (w <Lit_Chars foo>)) (C (w <Lit_Chars wc>) (w <Lit_Chars -l>)) ] ops:[<Op_Pipe "|">] ) (command.AndOr children:[(C (w <Lit_Chars ls>) (w <Lit_Chars foo>)) (C (w <Lit_Chars die>))] ops:[<Op_DPipe "||">] ) (command.AndOr children:[ (command.Pipeline children:[ (C (w <Lit_Chars ls>) (w <Lit_Chars foo>)) (C (w <Lit_Chars wc>) (w <Lit_Chars -l>)) ] ops:[<Op_Pipe "|">] ) (C (w <Lit_Chars die>)) ] ops:[<Op_DPipe "||">] ) (command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w <Lit_Chars foo>)) arms_start:<KW_In in> arms:[] arms_end:<KW_Esac esac> ) (command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w <Lit_Chars word>)) arms_start:<KW_In in> arms:[ (CaseArm left:<Lit_Chars foo> pattern:(pat.Words words:[(w <Lit_Chars foo>) (w <Lit_Chars foo2>) (w <Lit_Chars foo3>)] ) middle:<Right_CasePat ")"> action:[(C (w <Lit_Chars echo>) (w <Lit_Chars hi>))] right:<Op_DSemi ";;"> ) ] arms_end:<KW_Esac esac> ) (command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w <Lit_Chars word>)) arms_start:<KW_In in> arms:[ (CaseArm left:<Lit_Chars foo> pattern:(pat.Words words:[(w <Lit_Chars foo>)]) middle:<Right_CasePat ")"> action:[(C (w <Lit_Chars echo>) (w <Lit_Chars one-line>))] right:<Op_DSemi ";;"> ) ] arms_end:<KW_Esac esac> ) (command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w <Lit_Chars word>)) arms_start:<KW_In in> arms:[ (CaseArm left:<Lit_Chars foo> pattern:(pat.Words words:[(w <Lit_Chars foo>)]) middle:<Right_CasePat ")"> action:[(C (w <Lit_Chars echo>) (w <Lit_Chars foo>))] right:<Op_DSemi ";;"> ) (CaseArm left:<Lit_Chars bar> pattern:(pat.Words words:[(w <Lit_Chars bar>)]) middle:<Right_CasePat ")"> action:[(C (w <Lit_Chars echo>) (w <Lit_Chars bar>))] right:<Op_DSemi ";;"> ) ] arms_end:<KW_Esac esac> ) (command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w <Lit_Chars word>)) arms_start:<KW_In in> arms:[ (CaseArm left:<Lit_Chars foo> pattern:(pat.Words words:[(w <Lit_Chars foo>)]) middle:<Right_CasePat ")"> action:[(C (w <Lit_Chars echo>) (w <Lit_Chars foo>))] right:<Op_DSemi ";;"> ) (CaseArm left:<Lit_Chars bar> pattern:(pat.Words words:[(w <Lit_Chars bar>)]) middle:<Right_CasePat ")"> action:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars bar>)) terminator:<Op_Semi ";"> ) ] ) ] arms_end:<KW_Esac esac> ) (command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w <Lit_Chars word>)) arms_start:<KW_In in> arms:[ (CaseArm left:<Lit_Chars foo> pattern:(pat.Words words:[(w <Lit_Chars foo>)]) middle:<Right_CasePat ")"> action:[(C (w <Lit_Chars echo>) (w <Lit_Chars foo>))] right:<Op_DSemi ";;"> ) (CaseArm left:<Lit_Chars bar> pattern:(pat.Words words:[(w <Lit_Chars bar>)]) middle:<Right_CasePat ")"> action:[(C (w <Lit_Chars echo>) (w <Lit_Chars bar>))] ) ] arms_end:<KW_Esac esac> ) (command.Simple blame_tok:(Token id:Lit_Chars length:2 col:0 line:(SourceLine line_num:1 content:"ls foo" src:(source.MainFile path:"<test_lib>") ) ) more_env:[] words:[ (CompoundWord parts:[...0x7f49908c59a.....8]) (CompoundWord parts:[(Token id:Lit_Chars length:3 col:3 line:...0x7f499091fc58)] ) ] is_last_cmd:F ) (command.ShFunction name_tok:(Token id:Lit_Chars length:3 col:0 line:(SourceLine line_num:1 content:"fun() { echo hi; }" src:(source.MainFile path:"<test_lib>") ) ) name:fun body:(BraceGroup left:(Token id:Lit_LBrace length:1 col:6 line:...0x7f49909a0b50) children:[ (command.Sentence child:(command.Simple blame_tok:(Token id:Lit_Chars length:4 col:8 line:...0x7f49909a0b50) more_env:[] words:[ (CompoundWord parts:[...0x7f49908c5c80]) (CompoundWord parts:[ (Token id:Lit_Chars length:2 col:13 line:...0x7f49909a0b50) ] ) ] is_last_cmd:F ) terminator:(Token id:Op_Semi length:1 col:15 line:...0x7f49909a0b50) ) ] right:(Token id:Lit_RBrace length:1 col:17 line:...0x7f49909a0b50) ) ) (C (w <Lit_Chars echo>) (w (CommandSub left_token:<Left_DollarParen "$("> child:(C (w <Lit_Chars echo>) (w <Lit_Chars 12>)) right:<Eof_RParen ")"> ) (CommandSub left_token:<Left_DollarParen "$("> child:(C (w <Lit_Chars echo>) (w <Lit_Chars 34>)) right:<Eof_RParen ")"> ) ) ) (C (w <Lit_Chars echo>) (w (DQ (CommandSub left_token:<Left_DollarParen "$("> child:(C (w <Lit_Chars echo>) (w <Lit_Chars 12>)) right:<Eof_RParen ")"> ) (CommandSub left_token:<Left_DollarParen "$("> child:(C (w <Lit_Chars echo>) (w <Lit_Chars 34>)) right:<Eof_RParen ")"> ) ) ) ) (command.CommandList children:[ (command.DBracket left:<KW_DLeftBracket "[["> expr:(bool_expr.Binary op_id:BoolBinary_gt left:(w ($ VSub_Pound)) right:(w <Lit_Chars 1>) ) right:<Lit_DRightBracket "]]"> ) ] ) (command.CommandList children:[ (command.DBracket left:<KW_DLeftBracket "[["> expr:(bool_expr.LogicalAnd left:(bool_expr.Binary op_id:BoolBinary_gt left:(w ($ VSub_Pound)) right:(w <Lit_Chars 1>) ) right:(bool_expr.WordTest w:(w <Lit_Chars foo>)) ) right:<Lit_DRightBracket "]]"> ) ] ) (command.CommandList children:[ (command.If if_kw:<KW_If if> arms:[ (IfArm keyword:...0x7f499091bf58 cond:(List_of_command (command.DBracket left:<KW_DLeftBracket "[["> expr:(bool_expr.Binary op_id:BoolBinary_gt left:(w ($ VSub_Pound)) right:(w <Lit_Chars 1>) ) right:<Lit_DRightBracket "]]"> ) ) then_kw:<KW_Then then> action:[(C (w <Lit_Chars echo>) (w <Lit_Chars hi>))] then_tok:...0x7f49908c5188 ) ] else_action:[] fi_kw:<KW_Fi fi> ) ] ) (command.CommandList children:[ (command.DBracket left:<KW_DLeftBracket "[["> expr:(bool_expr.Binary op_id:BoolBinary_EqualTilde left:(w <Lit_Chars foo>) right:(w <Lit_Chars foo>) ) right:<Lit_DRightBracket "]]"> ) ] ) (command.CommandList children:[ (command.DBracket left:<KW_DLeftBracket "[["> expr:(bool_expr.Binary op_id:BoolBinary_EqualTilde left:(w <Lit_Chars foo>) right:(w (word_part.BashRegexGroup left:<BashRegex_LParen "("> child:(w <Lit_Chars foo> <Lit_Other "|"> <Lit_Chars bar>) right:<Right_BashRegexGroup ")"> ) ) ) right:<Lit_DRightBracket "]]"> ) ] ) (command.CommandList children:[ (command.DParen left:<Op_DLeftParen "(("> child:(arith_expr.Binary op:<Arith_Plus "+"> left:(w <Lit_Digits 1>) right:(w <Lit_Digits 2>) ) right:<Op_DRightParen ")"> ) ] ) (comman..d.CommandList children:[ (command.ForEach keyword:<KW_For for> iter_names:[i] iterable:(for_iter.Words words:[(w <Lit_Chars 1>) (w <Lit_Chars 2>) (w <Lit_Chars 3>)] ) semi_tok:<Op_Semi ";"> body:(command.DoGroup left:<KW_Do do> children:[(C (w <Lit_Chars echo>) (w ($ i)))] right:<KW_Done done> ) ) ] ) (command.CommandList children:[ (command.ForEach keyword:<KW_For for> iter_names:[i] iterable:(for_iter.Words words:[]) semi_tok:<Op_Semi ";"> body:(command.DoGroup left:<KW_Do do> children:[(C (w <Lit_Chars echo>) (w ($ i)))] right:<KW_Done done> ) ) ] ) (command.CommandList children:[ (command.ForEach keyword:<KW_For for> iter_names:[i] iterable:(for_iter.Args) body:(command.DoGroup left:<KW_Do do> children:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w ($ i))) terminator:<Op_Semi ";"> ) ] right:<KW_Done done> ) ) ] ) (command.CommandList children:[ (command.ForEach keyword:<KW_For for> iter_names:[i] iterable:(for_iter.Args) body:(command.DoGroup left:<KW_Do do> children:[(C (w <Lit_Chars echo>) (w ($ i)))] right:<KW_Done done> ) ) ] ) (command.CommandList children:[ (command.ForExpr keyword:<KW_For for> init:(arith_expr.BinaryAssign op_id:Arith_Equal left:<Lit_ArithVarLike i> right:(w <Lit_Digits 0>) ) cond:(arith_expr.Binary op:<Arith_Less "<"> left:<Lit_ArithVarLike i> right:(w <Lit_Digits 5>) ) update:(arith_expr.UnaryAssign op_id:Arith_DPlus child:<Lit_ArithVarLike i> ) body:(command.DoGroup left:<KW_Do do> children:[(C (w <Lit_Chars echo>) (w ($ i)))] right:<KW_Done done> ) ) ] ) (command.CommandList children:[ (command.ForExpr keyword:<KW_For for> init:(arith_expr.BinaryAssign op_id:Arith_Equal left:<Lit_ArithVarLike i> right:(w <Lit_Digits 0>) ) cond:(arith_expr.Binary op:<Arith_Less "<"> left:<Lit_ArithVarLike i> right:(w <Lit_Digits 5>) ) update:(arith_expr.UnaryAssign op_id:Arith_DPlus child:<Lit_ArithVarLike i> ) body:(command.DoGroup left:<KW_Do do> children:[(C (w <Lit_Chars echo>) (w ($ i)))] right:<KW_Done done> ) ) ] ) (command.CommandList children:[ (command.ForExpr keyword:<KW_For for> init:(arith_expr.EmptyZero) cond:(arith_expr.EmptyOne) update:...0x7f4990e85210 body:(command.DoGroup left:<KW_Do do> children:[(C (w <Lit_Chars echo>) (w ($ i)))] right:<KW_Done done> ) ) ] ) (command.CommandList children:[ (command.ShFunction name_tok:<Lit_Chars foo> name:foo body:(BraceGroup left:<Lit_LBrace "{"> children:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) terminator:<Op_Semi ";"> ) ] right:<Lit_RBrace "}"> ) ) ] ) (command.CommandList children:[ (command.ShFunction name_tok:<Lit_Chars foo> name:foo body:(command.Subshell left:<Op_LParen "("> child:(C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) right:<Right_Subshell ")"> is_last_cmd:F ) ) ] ) (command.CommandList children:[ (command.ShFunction name_tok:<Lit_Chars foo> name:foo body:(command.ForEach keyword:<KW_For for> iter_names:[i] iterable:(for_iter.Words words:[(w <Lit_Chars x>)]) semi_tok:<Op_Semi ";"> body:(command.DoGroup left:<KW_Do do> children:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w ($ i))) terminator:.<Op_Semi ";"> ) ] right:<KW_Done done> ) ) ) ] ) (command.CommandList children:[ (command.ShFunction keyword:<KW_Function function> name_tok:<Lit_Chars foo> name:foo body:(BraceGroup left:<Lit_LBrace "{"> children:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) terminator:<Op_Semi ";"> ) ] right:<Lit_RBrace "}"> ) ) ] ) (command.CommandList children:[ (command.ShFunction keyword:<KW_Function function> name_tok:<Lit_Chars foo> name:foo body:(BraceGroup left:<Lit_LBrace "{"> children:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) terminator:<Op_Semi ";"> ) ] right:<Lit_RBrace "}"> ) ) ] ) (command.CommandList children:[ (command.ShFunction keyword:<KW_Function function> name_tok:<Lit_Chars foo> name:foo body:(command.Subshell left:<Op_LParen "("> child:(C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) right:<Right_Subshell ")"> is_last_cmd:F ) ) ] ) (command.CommandList children:[ (command.ShFunction keyword:<KW_Function function> name_tok:<Lit_Chars foo> name:foo body:(command.ForEach keyword:<KW_For for> iter_names:[i] iterable:(for_iter.Words words:[(w <Lit_Chars x>)]) semi_tok:<Op_Semi ";"> body:(command.DoGroup left:<KW_Do do> children:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w ($ i))) terminator:<Op_Semi ";"> ) ] right:<KW_Done done> ) ) ) ] ) (command.CommandList children:[ (command.ShFunction keyword:<KW_Function function> name_tok:<Lit_Chars foo> name:foo body:(command.ForEach keyword:<KW_For for> iter_names:[i] iterable:(for_iter.Words words:[(w <Lit_Chars x>)]) semi_tok:<Op_Semi ";"> body:(command.DoGroup left:<KW_Do do> children:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w ($ i))) terminator:<Op_Semi ";"> ) ] right:<KW_Done done> ) ) ) ] ) (command.CommandList children:[ (command.ShFunction name_tok:<Lit_Chars foo> name:foo body:(command.Redirect child:(BraceGroup left:<Lit_LBrace "{"> children:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) terminator:<Op_Semi ";"> ) ] right:<Lit_RBrace "}"> ) redirects:[ (Redir op:<Redir_GreatAnd "1>&"> loc:(redir_loc.Fd fd:1) arg:(w <Lit_Chars 2>) ) (Redir op:<Redir_Great "2>"> loc:(redir_loc.Fd fd:2) arg:(w <Lit_Slash /> <Lit_Chars dev> <Lit_Slash /> <Lit_Chars "null"> ) ) ] ) ) ] ) (command.CommandList children:[ (command.If if_kw:<KW_If if> arms:[ (IfArm keyword:...0x7f49908b4ae0 cond:(List_of_command (command.Sentence child:(C (w <Lit_Chars "true">)) terminator:<Op_Semi ";"> ) ) then_kw:<KW_Then then> action:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars yes>)) terminator:<Op_Semi ";"> ) ] then_tok:...0x7f49908f3ce8 ) ] else_action:[] fi_kw:<KW_Fi fi> ) ] ) (command.CommandList children:[ (command.If if_kw:<KW_If if> arms:[ (IfArm keyword:...0x7f49908f3a78 co.. ls foo| ^ "<cmd_parse_test>":1: Unexpected EOF while parsing command ....nd:(List_of_command (command.Sentence child:(command.Subshell left:<Op_LParen "("> child:(C (w <Lit_Chars "true">)) right:<Right_Subshell ")"> is_last_cmd:F ) terminator:<Op_Semi ";"> ) ) then_kw:<KW_Then then> action:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars yes>)) terminator:<Op_Semi ";"> ) ] then_tok:...0x7f49908f36d0 ) ] else_action:[] fi_kw:<KW_Fi fi> ) ] ) (command.CommandList children:[(C (w <Lit_Chars ifFOO>))]) (C (w <Lit_Chars ls>) (w <Lit_Chars foo>)) (command.Pipeline children:[ (C (w <Lit_Chars ls>) (w <Lit_Chars foo>)) (C (w <Lit_Chars wc>) (w <Lit_Chars -l>)) ] ops:[<Op_Pipe "|">] ) (command.Pipeline negated:<KW_Bang "!"> children:[ (C (w <Lit_Chars echo>) (w <Lit_Chars foo>)) (C (w <Lit_Chars grep>) (w <Lit_Chars foo>)) ] ops:[<Op_Pipe "|">] ) (command.Pipeline children:[ (C (w <Lit_Chars ls>) (w <Lit_Chars foo>)) (C (w <Lit_Chars wc>) (w <Lit_Chars -l>)) (C (w <Lit_Chars less>)) ] ops:[<Op_Pipe "|"> <Op_Pipe "|">] ) (command.CommandList children:[ (command.Pipeline children:[ (C (w <Lit_Chars ls>)) (C (w <Lit_Chars cat>)) (C (w <Lit_Chars cat>)) ] ops:[<Op_Pipe "|"> <Op_PipeAmp "|&">] ) ] ) (command.CommandList children:[ (command.Pipeline children:[ (C (w <Lit_Chars ls>)) (C (w <Lit_Chars cat>)) (C (w <Lit_Chars cat>)) ] ops:[<Op_PipeAmp "|&"> <Op_Pipe "|">] ) ] ) (command.CommandList children:[ (command.Pipeline children:[ (C (w <Lit_Chars ls>)) (C (w <Lit_Chars cat>)) (C (w <Lit_Chars cat>)) ] ops:[<Op_PipeAmp "|&"> <Op_PipeAmp "|&">] ) ] ) (command.CommandList children:[ (C (w <Lit_Chars ls>) (w (word_part.TildeSub left:<Lit_Tilde "~">)) (w (word_part.TildeSub left:<Lit_Tilde "~"> name:<Lit_Chars root> user_name:root ) ) (w (word_part.TildeSub left:<Lit_Tilde "~">) <Lit_Slash /> <Lit_Chars src> ) (w (word_part.TildeSub left:<Lit_Tilde "~">) <Lit_Slash /> <Lit_Chars src> <Lit_Slash /> <Lit_Chars foo> ) (w (word_part.TildeSub left:<Lit_Tilde "~"> name:<Lit_Chars root> user_name:root ) <Lit_Slash /> <Lit_Chars src> ) (w <Lit_Tilde "~"> <Lit_Chars weird> <KW_Bang "!"> <Lit_Chars name> <Lit_Slash /> <Lit_Chars blah> <KW_Bang "!"> <Lit_Chars blah> ) ) ] ) (command.CommandList children:[ (command.WhileUntil keyword:<KW_Until until> cond:(List_of_command (command.Sentence child:(C (w <Lit_Chars "false">)) terminator:<Op_Semi ";"> ) ) body:(command.DoGroup left:<KW_Do do> children:[ (C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) (command.ControlFlow keyword:<ControlFlow_Break break>) ] right:<KW_Done done> ) ) ] ) (command.CommandList children:[ (command.WhileUntil keyword:<KW_While while> cond:(List_of_command (command.Sentence child:(C (w <Lit_Chars "true">)) terminator:<Op_Semi ";"> ) ) body:(command.DoGroup left:<KW_Do do> children:[ (C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) (command.ControlFlow keyword:<ControlFlow_Break break>) ] right:<KW_Done done> ) ) ] ) (command.CommandList children:[ (command.WhileUntil keyword:<KW_While while> cond:(List_of_command (C (w <Lit_Chars "true">))) body:(command.DoGroup left:<KW_Do d.o> children:[ (C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) (command.ControlFlow keyword:<ControlFlow_Break break>) ] right:<KW_Done done> ) ) ] ) (command.Case case_kw:<KW_Case case> to_match:(case_arg.YshExpr e:(Var x)) arms_start:<Lit_LBrace "{"> arms:[] arms_end:<Lit_RBrace "}"> ) (command.Case case_kw:<KW_Case case> to_match:(case_arg.YshExpr e:(Var x)) arms_start:<Lit_LBrace "{"> arms:[ (CaseArm left:<Op_LParen "("> pattern:(pat.Else) middle:<Lit_LBrace "{"> action:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) terminator:<Op_Semi ";"> ) ] right:<Lit_RBrace "}"> ) ] arms_end:<Lit_RBrace "}"> ) (command.Case case_kw:<KW_Case case> to_match:(case_arg.YshExpr e:(Var x)) arms_start:<Lit_LBrace "{"> arms:[ (CaseArm left:<Op_LParen "("> pattern:(pat.YshExprs exprs:[(Const Expr_DecInt _) (Const Expr_DecInt _)]) middle:<Lit_LBrace "{"> action:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) terminator:<Op_Semi ";"> ) ] right:<Lit_RBrace "}"> ) ] arms_end:<Lit_RBrace "}"> ) (command.Case case_kw:<KW_Case case> to_match:(case_arg.YshExpr e:(Var x)) arms_start:<Lit_LBrace "{"> arms:[ (CaseArm left:<Lit_Chars bare> pattern:(pat.Words words:[(w <Lit_Chars bare>) (w <Lit_Chars x>) (w (SQ string))] ) middle:<Lit_LBrace "{"> action:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) terminator:<Op_Semi ";"> ) ] right:<Lit_RBrace "}"> ) ] arms_end:<Lit_RBrace "}"> ) (command.Case case_kw:<KW_Case case> to_match:(case_arg.YshExpr e:(Var x)) arms_start:<Lit_LBrace "{"> arms:[ (CaseArm left:<Arith_Slash /> pattern:(Eggex left:...0x7f499094c8d8 regex:(re.Repeat child:(PerlClass name:d) op:<Arith_Plus "+">) flags:[] canonical_flags:"" ) middle:<Lit_LBrace "{"> action:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars space>)) terminator:<Op_Semi ";"> ) ] right:<Lit_RBrace "}"> ) (CaseArm left:<Arith_Slash /> pattern:(Eggex left:...0x7f499094c530 regex:(re.Repeat child:(PerlClass name:d) op:<Arith_Plus "+">) flags:[] canonical_flags:"" ) middle:<Lit_LBrace "{"> action:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars space2>)) terminator:<Op_Semi ";"> ) ] right:<Lit_RBrace "}"> ) ] arms_end:<Lit_RBrace "}"> ) (command.Case case_kw:<KW_Case case> to_match:(case_arg.YshExpr e:(Var x)) arms_start:<Lit_LBrace "{"> arms:[ (CaseArm left:<Lit_Chars word> pattern:(pat.Words words:[(w <Lit_Chars word>)]) middle:<Lit_LBrace "{"> action:[(command.Expr keyword:<Lit_Equals "="> e:(Var x))] right:<Lit_RBrace "}"> ) ] arms_end:<Lit_RBrace "}"> ) (command.Case case_kw:<KW_Case case> to_match:(case_arg.YshExpr e:(Var x)) arms_start:<Lit_LBrace "{"> arms:[ (CaseArm left:<Arith_Slash /> pattern:(Eggex left:...0x7f49907d6ce8 regex:(SQ eggex) flags:[] canonical_flags:"" ) middle:<Lit_LBrace "{"> action:[(command.Expr keyword:<Lit_Equals "="> e:(Var x))] right:<Lit_RBrace "}"> ) ] arms_end:<Lit_RBrace "}"> ) (command.Case case_kw:<KW_Case case> to_match:(case_arg.YshExpr e:(Var x)) arms_start:<Lit_LBrace "{"> arms:[ (CaseArm left:<Op_LParen "("> pattern:(pat.YshExprs exprs:[(SQ expr)]) middle:<Lit_LBrace "{"> action:[(command.Expr keyword:<Lit_Equals "="> e:(Var x))] right:<Lit_RBrace "}"> ) ] arms_end:<Lit_RBrace "}"> ) (command.Case case_kw:<KW_Case case> to_match:(case_arg.YshExpr e:(Var x)... (( 1 + )) ^ "<cmd_parse_test>":1: Token can't be used in prefix position . A= (1 2) ^ "<cmd_parse_test>":1: Expected ( after = . [[ foo bar ]] ^~~ "<cmd_parse_test>":1: Expected ]] [[ foo -eq ]] ^ "<cmd_parse_test>":1: Expected ]] [[ foo$(echo <) -eq foo ]] ^ "<cmd_parse_test>":1: Invalid token after redirect operator . ls < ^ "<cmd_parse_test>":1: Invalid token after redirect operator ls < < ^ "<cmd_parse_test>":1: Invalid token after redirect operator echo foo$(ls <)bar ^ "<cmd_parse_test>":1: Invalid token after redirect operator BAD_ENV=(1 2 3) ls ^~~~~~~~ "<cmd_parse_test>":1: Environment bindings can't contain array literals for ((i=1; i<)); do echo $i; done ^ "<cmd_parse_test>":1: Token can't be used in prefix position for ((i=1; i<5; ++i)) OOPS echo $i; ERR ^~~~ "<cmd_parse_test>":1: Invalid word after for expression for ((i=1; i<5; ++i)); OOPS echo $i; ERR ^~~~ "<cmd_parse_test>":1: Expected word type Id.KW_Do, got Id.Word_Compound for $bad in 1 2; do echo hi; done ^~~~ "<cmd_parse_test>":1: Expected loop variable (a constant word) for foo BAD ^ "<cmd_parse_test>":1: Expected loop variable (a constant word) if foo; then echo hi; z ^ "<cmd_parse_test>":1: Expected word type Id.KW_Fi, got Id.Eof_Real foo$(invalid) () { echo hi; } ^~~ "<cmd_parse_test>":1: Invalid function name . foo="" echo "bar ^ "<cmd_parse_test>":1: Unexpected EOF reading double-quoted string that began here .. for x in 1 2 $( ^ "<cmd_parse_test>":1: Invalid word in for loop . for [ i = 1; i < 10; i++ ] ^ "<cmd_parse_test>":1: Invalid loop variable name '[' for = in a ^ "<cmd_parse_test>":1: Invalid loop variable name '=' . for x in 1 2 $(cat <<EOF ^~ "<cmd_parse_test>":1: Couldn't find terminator for here doc that starts here . foo"bar" () { ^~~ "<cmd_parse_test>":1: Invalid function name ..) arms_start:<Lit_LBrace "{"> arms:[ (CaseArm left:<Op_LParen "("> pattern:(pat.Else) middle:<Lit_LBrace "{"> action:[(command.Expr keyword:<Lit_Equals "="> e:(Var x))] right:<Lit_RBrace "}"> ) ] arms_end:<Lit_RBrace "}"> ) (command.Redirect child:(C (w <Lit_Chars ls>) (w <Lit_Chars foo>)) redirects:[ (Redir op:<Redir_Great "2>"> loc:(redir_loc.Fd fd:2) arg:(w <Lit_Slash /> <Lit_Chars dev> <Lit_Slash /> <Lit_Chars "null">) ) ] ) (command.Pipeline children:[ (C (w <Lit_Chars ls>) (w <Lit_Chars foo>)) (C (w <Lit_Chars wc>) (w <Lit_Chars -l>)) ] ops:[<Op_Pipe "|">] ) (command.AndOr children:[ (command.Pipeline children:[ (C (w <Lit_Chars ls>) (w <Lit_Chars foo>)) (C (w <Lit_Chars wc>) (w <Lit_Chars -l>)) ] ops:[<Op_Pipe "|">] ) (C (w <Lit_Chars die>)) ] ops:[<Op_DPipe "||">] ) (command.CommandList children:[ (command.Sentence child:(command.AndOr children:[ (command.Pipeline children:[ (C (w <Lit_Chars ls>) (w <Lit_Chars foo>)) (C (w <Lit_Chars wc>) (w <Lit_Chars -l>)) ] ops:[<Op_Pipe "|">] ) (C (w <Lit_Chars die>)) ] ops:[<Op_DPipe "||">] ) terminator:<Op_Semi ";"> ) (C (w <Lit_Chars ls>) (w <Lit_Slash />)) ] ) (command.CommandList children:[(C (w <Lit_Chars ls>) (w <Lit_Chars foo>))]) (command.CommandList children:[ (command.Sentence child:(command.AndOr children:[ (command.Pipeline children:[ (C (w <Lit_Chars ls>) (w <Lit_Chars foo>)) (C (w <Lit_Chars wc>) (w <Lit_Chars -l>)) ] ops:[<Op_Pipe "|">] ) (C (w <Lit_Chars die>)) ] ops:[<Op_DPipe "||">] ) terminator:<Op_Semi ";"> ) (C (w <Lit_Chars ls>) (w <Lit_Slash />)) ] ) (command.CommandList children:[ (command.Sentence child:(command.AndOr children:[ (command.Pipeline children:[ (C (w <Lit_Chars ls>) (w <Lit_Chars foo>)) (C (w <Lit_Chars wc>) (w <Lit_Chars -l>)) ] ops:[<Op_Pipe "|">] ) (C (w <Lit_Chars echo>) (w <Lit_Chars fail>)) ] ops:[<Op_DPipe "||">] ) terminator:<Op_Semi ";"> ) (command.AndOr children:[ (command.Pipeline children:[ (C (w <Lit_Chars echo>) (w <Lit_Chars bar>)) (C (w <Lit_Chars wc>) (w <Lit_Chars -c>)) ] ops:[<Op_Pipe "|">] ) (C (w <Lit_Chars echo>) (w <Lit_Chars f2>)) ] ops:[<Op_DPipe "||">] ) ] ) (command.Redirect child:(C (w <Lit_Chars cat>)) redirects:[ (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EOF>) here_end_tok:<Undefined_Tok "EOF\n"> stdin_parts:[ <Lit_Chars "1 "> (CommandSub left_token:<Left_DollarParen "$("> child:(command.CommandList children:[ (C (w <Lit_Chars echo>) (w <Lit_Chars 2>)) (C (w <Lit_Chars echo>) (w <Lit_Chars 3>)) ] ) right:<Eof_RParen ")"> ) <Lit_Chars " 4\n"> ] ) ) ] ) (command.AndOr children:[ (command.Redirect child:(C (w <Lit_Chars cat>)) redirects:[ (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EOF>) here_end_tok:<Undefined_Tok "EOF\n"> stdin_parts:[<Lit_Chars "PIPE 1\n"> <Lit_Chars "PIPE 2\n">] ) ) ] ) (C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) ] ops:[<Op_DPipe "||">] ) (command.AndOr children:[ (command.Redirect child:(C (w <Lit_Chars cat>)) redirects:[ ..... (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EOF>) here_end_tok:<Undefined_Tok "EOF\n"> stdin_parts:[<Lit_Chars "PIPE 1\n"> <Lit_Chars "PIPE 2\n">] ) ) ] ) (C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) ] ops:[<Op_DAmp "&&">] ) (command.AndOr children:[ (command.Redirect child:(C (w <Lit_Chars tac>)) redirects:[ (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EOF1>) here_end_tok:<Undefined_Tok "EOF1\n"> stdin_parts:[<Lit_Chars "PIPE A1\n"> <Lit_Chars "PIPE A2\n">] ) ) ] ) (command.Redirect child:(C (w <Lit_Chars tac>)) redirects:[ (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EOF2>) here_end_tok:<Undefined_Tok "EOF2\n"> stdin_parts:[<Lit_Chars "PIPE B1\n"> <Lit_Chars "PIPE B2\n">] ) ) ] ) ] ops:[<Op_DAmp "&&">] ) (command.Pipeline children:[ (command.Redirect child:(C (w <Lit_Chars cat>)) redirects:[ (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EOF>) here_end_tok:<Undefined_Tok "EOF\n"> stdin_parts:[<Lit_Chars "PIPE 1\n"> <Lit_Chars "PIPE 2\n">] ) ) ] ) (C (w <Lit_Chars tac>)) ] ops:[<Op_Pipe "|">] ) (command.Pipeline children:[ (command.Redirect child:(C (w <Lit_Chars cat>)) redirects:[ (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EOF>) here_end_tok:<Undefined_Tok "EOF\n"> stdin_parts:[<Lit_Chars "PIPE 1\n"> <Lit_Chars "PIPE 2\n">] ) ) ] ) (C (w <Lit_Chars tac>)) ] ops:[<Op_Pipe "|">] ) (command.CommandList children:[ (command.Sentence child:(command.Redirect child:(C (w <Lit_Chars cat>)) redirects:[ (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EOF>) here_end_tok:<Undefined_Tok "EOF\n"> stdin_parts:[<Lit_Chars "PIPE 1\n"> <Lit_Chars "PIPE 2\n">] ) ) ] ) terminator:<Op_Semi ";"> ) (C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) ] ) (command.CommandList children:[ (command.Sentence child:(command.Redirect child:(C (w <Lit_Chars cat>)) redirects:[ (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EOF>) here_end_tok:<Undefined_Tok "EOF\n"> stdin_parts:[<Lit_Chars "PIPE 1\n"> <Lit_Chars "PIPE 2\n">] ) ) ] ) terminator:<Op_Semi ";"> ) (C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) ] ) (command.Redirect child:(C (w <Lit_Chars cat>)) redirects:[ (Redir op:<Redir_DLessDash "<<-"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EOF>) here_end_tok:<Undefined_Tok "EOF\n"> stdin_parts:[<Lit_Chars "one tab then foo: "> ($ foo) <Lit_Chars "\n">] ) ) ] ) (command.Redirect child:(C (w <Lit_Chars cat>)) redirects:[ (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w (DQ <Lit_Chars EOF>)) here_end_tok:<Undefined_Tok "EOF\n"> stdin_parts:[<Lit_Chars "$v\n"> <Lit_Chars "\"two\n">] ) ) ] ) (command.Redirect child:(C (w <Lit_Chars cat>)) redirects:[ .... (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w (SQ EOF)) here_end_tok:<Undefined_Tok "EOF\n"> stdin_parts:[<Lit_Chars "single-quoted: $var\n">] ) ) ] ) (command.Redirect child:(C (w <Lit_Chars cat>)) redirects:[ (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EO> (word_part.EscapedLiteral token:<Lit_EscapedChar "\\F"> ch:F) ) here_end_tok:<Undefined_Tok "EOF\n"> stdin_parts:[<Lit_Chars "single-quoted: $var\n">] ) ) ] ) (command.CommandList children:[ (command.Pipeline children:[ (command.Redirect child:(C (w <Lit_Chars cat>)) redirects:[ (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EOF1>) here_end_tok:<Undefined_Tok "EOF1\n"> stdin_parts:[<Lit_Chars "PIPE A1\n"> <Lit_Chars "PIPE A2\n">] ) ) ] ) (command.Redirect child:(C (w <Lit_Chars tac>)) redirects:[ (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EOF2>) here_end_tok:<Undefined_Tok "EOF2\n"> stdin_parts:[<Lit_Chars "PIPE B1\n"> <Lit_Chars "PIPE B2\n">] ) ) ] ) ] ops:[<Op_Pipe "|">] ) ] ) (command.Redirect child:(C (w <Lit_Chars cat>)) redirects:[ (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EOF>) here_end_tok:<Undefined_Tok "EOF\n"> stdin_parts:[ ($ v) <Lit_Chars "\n"> <Right_DoubleQuote "\""> <Lit_Chars "two\n"> ] ) ) ] ) (C (w <Lit_Chars echo>) (w (CommandSub left_token:<Left_DollarParen "$("> child:(C (w <Lit_Chars echo>) (w (word_part.ArithSub left:<Left_DollarDParen "$(("> anode:(arith_expr.Binary op:<Arith_Star "*"> left:(w <Lit_Digits 1>) right:(arith_expr.Binary op:<Arith_Plus "+"> left:(w <Lit_Digits 2>) right:(w <Lit_Digits 3>) ) ) right:<Right_DollarDParen ")"> ) ) ) right:<Eof_RParen ")"> ) ) ) (command.CommandList children:[ (command.Subshell left:<Op_LParen "("> child:(C (w <Lit_Chars echo>) (w (word_part.ArithSub left:<Left_DollarDParen "$(("> anode:(arith_expr.Binary op:<Arith_Star "*"> left:(w <Lit_Digits 1>) right:(arith_expr.Binary op:<Arith_Plus "+"> left:(w <Lit_Digits 2>) right:(w <Lit_Digits 3>) ) ) right:<Right_DollarDParen ")"> ) ) ) right:<Right_Subshell ")"> is_last_cmd:F ) ] ) (C (w <Lit_Chars echo>) (w (CommandSub left_token:<Left_DollarParen "$("> child:(C (w <Lit_Chars echo>) (w (word_part.ArithSub left:<Left_DollarDParen "$(("> anode:(arith_expr.Binary op:<Arith_Plus "+"> left:(w <Lit_Digits 1>) right:(w <Lit_Digits 2>) ) right:<Right_DollarDParen ")"> ) ) ) right:<Eof_RParen ")"> ) ) ) (command.CommandList children:[ (command.Subshell left:<Op_LParen "("> child:(C (w <Lit_Chars echo>) (w (word_part.ArithSub left:<Left_DollarDParen "$(("> anode:(arith_...expr.Binary op:<Arith_Plus "+"> left:(w <Lit_Digits 1>) right:(w <Lit_Digits 2>) ) right:<Right_DollarDParen ")"> ) ) ) right:<Right_Subshell ")"> is_last_cmd:F ) ] ) (command.CommandList children:[ (C (w <Lit_Chars echo>) (w (CommandSub left_token:<Left_DollarParen "$("> child:(command.ShAssignment left:<Lit_VarLike "array="> pairs:[ (AssignPair left:...0x7f49908ae050 lhs:(sh_lhs.Name left:...0x7f49908ae050 name:array) op:assign_op.Equal rhs:(w (word_part.InitializerLiteral left:<Op_LParen "("> pairs:[ (InitializerWord.ArrayWord w:(w <Lit_Chars a>)) (InitializerWord.ArrayWord w:(w <Lit_Chars b>)) (InitializerWord.ArrayWord w:(w <Lit_Chars c>)) ] right:<Right_Initializer ")"> ) ) ) ] ) right:<Eof_RParen ")"> ) ) ) ] ) (command.CommandList children:[ (command.Subshell left:<Op_LParen "("> child:(command.ShAssignment left:<Lit_VarLike "array="> pairs:[ (AssignPair left:...0x7f499095d870 lhs:(sh_lhs.Name left:...0x7f499095d870 name:array) op:assign_op.Equal rhs:(w (word_part.InitializerLiteral left:<Op_LParen "("> pairs:[ (InitializerWord.ArrayWord w:(w <Lit_Chars a>)) (InitializerWord.ArrayWord w:(w <Lit_Chars b>)) (InitializerWord.ArrayWord w:(w <Lit_Chars c>)) ] right:<Right_Initializer ")"> ) ) ) ] ) right:<Right_Subshell ")"> is_last_cmd:F ) ] ) (command.CommandList children:[ (C (w (CommandSub left_token:<Left_DollarParen "$("> child:(command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w <Lit_Chars foo>)) arms_start:<KW_In in> arms:[ (CaseArm left:<Op_LParen "("> pattern:(pat.Words words:[(w <Lit_Chars one>)]) middle:<Right_CasePat ")"> action:[(C (w <Lit_Chars echo>) (w <Lit_Chars hi>))] right:<Op_DSemi ";;"> ) ] arms_end:<KW_Esac esac> ) right:<Eof_RParen ")"> ) ) ) ] ) (command.CommandList children:[ (command.Subshell left:<Op_LParen "("> child:(command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w <Lit_Chars foo>)) arms_start:<KW_In in> arms:[ (CaseArm left:<Op_LParen "("> pattern:(pat.Words words:[(w <Lit_Chars one>)]) middle:<Right_CasePat ")"> action:[(C (w <Lit_Chars echo>) (w <Lit_Chars hi>))] right:<Op_DSemi ";;"> ) ] arms_end:<KW_Esac esac> ) right:<Right_Subshell ")"> is_last_cmd:F ) ] ) (command.CommandList children:[ (C (w <Lit_Chars echo>) (w (CommandSub left_token:<Left_DollarParen "$("> child:(command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w <Lit_Chars foo>)) arms_start:<KW_In in> arms:[ (CaseArm left:<Lit_Chars one> pattern:(pat.Words words:[(w <Lit_Chars one>)]) middle:<Right_CasePat ")"> action:[(C (w <Lit_Chars echo>) (w <Lit_Chars comsub>))] right:<Op_DSemi ";;"> ) ] arms_end:<KW_Esac esac> ) right:<....Eof_RParen ")"> ) ) ) ] ) (command.CommandList children:[ (C (w <Lit_Chars echo>) (w (CommandSub left_token:<Left_DollarParen "$("> child:(command.CommandList children:[ (command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w <Lit_Chars foo>)) arms_start:<KW_In in> arms:[ (CaseArm left:<Lit_Chars one> pattern:(pat.Words words:[(w <Lit_Chars one>)]) middle:<Right_CasePat ")"> action:[(C (w <Lit_Chars echo>) (w <Lit_Chars comsub1>))] right:<Op_DSemi ";;"> ) ] arms_end:<KW_Esac esac> ) (command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w <Lit_Chars bar>)) arms_start:<KW_In in> arms:[ (CaseArm left:<Lit_Chars two> pattern:(pat.Words words:[(w <Lit_Chars two>)]) middle:<Right_CasePat ")"> action:[(C (w <Lit_Chars echo>) (w <Lit_Chars comsub2>))] right:<Op_DSemi ";;"> ) ] arms_end:<KW_Esac esac> ) ] ) right:<Eof_RParen ")"> ) ) ) ] ) (C (w <Lit_Chars echo>) (w (DQ <Lit_Chars "double "> (CommandSub left_token:<Left_DollarParen "$("> child:(C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) right:<Eof_RParen ")"> ) <Lit_Chars " quoted"> ) ) (w <Lit_Chars two>) ) (command.CommandList children:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars one>)) terminator:<Op_Semi ";"> ) (command.Sentence child:(C (w <Lit_Chars echo>) (w (CommandSub left_token:<Left_DollarParen "$("> child:(command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w <Lit_Chars one>)) arms_start:<KW_In in> arms:[ (CaseArm left:<Left_DollarParen "$("> pattern:(pat.Words words:[ (w (CommandSub left_token:<Left_DollarParen "$("> child:(C (w <Lit_Chars echo>) (w <Lit_Chars one>)) right:<Eof_RParen ")"> ) ) ] ) middle:<Right_CasePat ")"> action:[ (C (w <Lit_Chars echo>) (w (CommandSub left_token:<Left_DollarParen "$("> child:(C (w <Lit_Chars comsub>)) right:<Eof_RParen ")"> ) ) ) ] right:<Op_DSemi ";;"> ) ] arms_end:<KW_Esac esac> ) right:<Eof_RParen ")"> ) ) ) terminator:<Op_Semi ";"> ) (C (w <Lit_Chars echo>) (w <Lit_Chars two>)) ] ) (command.CommandList children:[ (command.Subshell left:<Op_LParen "("> child:(command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w <Lit_Chars foo>)) arms_start:<KW_In in> arms:[] arms_end:<KW_Esac esac> ) right:<Right_Subshell ")"> is_last_cmd:F ) ] ) (command.CommandList children:[ (C (w (CommandSub left_token:<Left_DollarParen "$("> child:(command.ForExpr keyword:<KW_For for> init:(arith_expr.BinaryAssign op_id:Arit.....h_Equal left:<Lit_ArithVarLike i> right:(w <Lit_Digits 0>) ) cond:(arith_expr.Binary op:<Arith_Less "<"> left:<Lit_ArithVarLike i> right:(w <Lit_Digits 3>) ) update:(arith_expr.UnaryAssign op_id:Arith_DPlus child:<Lit_ArithVarLike i> ) body:(command.DoGroup left:<KW_Do do> children:[(C (w <Lit_Chars echo>) (w <Lit_Chars hi>))] right:<KW_Done done> ) ) right:<Eof_RParen ")"> ) ) ) ] ) (command.CommandList children:[ (command.Subshell left:<Op_LParen "("> child:(command.ForExpr keyword:<KW_For for> init:(arith_expr.BinaryAssign op_id:Arith_Equal left:<Lit_ArithVarLike i> right:(w <Lit_Digits 0>) ) cond:(arith_expr.Binary op:<Arith_Less "<"> left:<Lit_ArithVarLike i> right:(w <Lit_Digits 3>) ) update:(arith_expr.UnaryAssign op_id:Arith_DPlus child:<Lit_ArithVarLike i> ) body:(command.DoGroup left:<KW_Do do> children:[(C (w <Lit_Chars echo>) (w <Lit_Chars hi>))] right:<KW_Done done> ) ) right:<Right_Subshell ")"> is_last_cmd:F ) ] ) (C (w <Lit_Chars echo>) (w (word_part.ArithSub left:<Left_DollarDParen "$(("> anode:(arith_expr.BinaryAssign op_id:Arith_Equal left:(arith_expr.Binary op:<Arith_LBracket "["> left:<Lit_ArithVarLike a> right:(arith_expr.Binary op:<Arith_Star "*"> left:(w <Lit_Digits 1>) right:(arith_expr.Binary op:<Arith_Plus "+"> left:(w <Lit_Digits 2>) right:(w <Lit_Digits 3>) ) ) ) right:<Lit_ArithVarLike x> ) right:<Right_DollarDParen ")"> ) ) ) (C (w <Lit_Chars echo>) (w (CommandSub left_token:<Left_DollarParen "$("> child:(C (w <Lit_Chars one> (CommandSub left_token:<Left_DollarParen "$("> child:(C (w <Lit_Chars echo>) (w <Lit_Chars two>)) right:<Eof_RParen ")"> ) <Lit_Chars one> ) ) right:<Eof_RParen ")"> ) ) (w <Lit_Chars three>) ) (BraceGroup left:<Lit_LBrace "{"> children:[ (command.Sentence child:(C (w <Lit_Chars cd>) (w <Lit_Slash />)) terminator:<Op_Semi ";"> ) (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars PWD>)) terminator:<Op_Semi ";"> ) ] right:<Lit_RBrace "}"> ) (command.CommandList children:[ (command.Sentence child:(BraceGroup left:<Lit_LBrace "{"> children:[ (command.Sentence child:(C (w <Lit_Chars cd>) (w <Lit_Slash />)) terminator:<Op_Semi ";"> ) (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars PWD>)) terminator:<Op_Semi ";"> ) ] right:<Lit_RBrace "}"> ) terminator:<Op_Semi ";"> ) (C (w <Lit_Chars echo>) (w <Lit_Chars PWD>)) ] ) (command.CommandList children:[ (command.Sentence child:(command.Subshell left:<Op_LParen "("> child:(command.CommandList children:[ (command.Sentence child:(C (w <Lit_Chars cd>) (w <Lit_Slash />)) terminator:<Op_Semi ";"> ) (C (w <Lit_Chars echo>) (w <Lit_Chars PWD>) (w <Lit_Chars 1>)) ] ) right:<Right_Subshell ")"> is_last_cmd:F ) terminator:<Op_Semi ";"> ) (C (w <Lit_Chars echo>) (w <Lit_Chars PWD>) (w <Lit_Chars 2>)) ] ) (command.CommandList children:[ (C (w <Lit_Chars echo>) (w (CommandSub left_token:<Left_DollarParen "$("> child:(c..ommand.CommandList children:[ (command.Sentence child:(command.ShFunction name_tok:<Lit_Chars fun> name:fun body:(BraceGroup left:<Lit_LBrace "{"> children:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) terminator:<Op_Semi ";"> ) ] right:<Lit_RBrace "}"> ) ) terminator:<Op_Semi ";"> ) (C (w <Lit_Chars fun>)) ] ) right:<Eof_RParen ")"> ) ) ) ] ) (command.CommandList children:[ (command.Subshell left:<Op_LParen "("> child:(command.CommandList children:[ (command.Sentence child:(command.ShFunction name_tok:<Lit_Chars fun> name:fun body:(BraceGroup left:<Lit_LBrace "{"> children:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) terminator:<Op_Semi ";"> ) ] right:<Lit_RBrace "}"> ) ) terminator:<Op_Semi ";"> ) (C (w <Lit_Chars fun>)) ] ) right:<Right_Subshell ")"> is_last_cmd:F ) ] ) (command.CommandList children:[ (command.Sentence child:(C (w <Lit_Chars echo>) (w <Lit_Chars one>)) terminator:<Op_Semi ";"> ) (command.Sentence child:(C (w <Lit_Chars echo>) (w (CommandSub left_token:<Left_DollarParen "$("> child:(command.CommandList children:[ (command.Sentence child:(command.Subshell left:<Op_LParen "("> child:(command.CommandList children:[ (command.Sentence child:(C (w <Lit_Chars cd>) (w <Lit_Slash />)) terminator:<Op_Semi ";"> ) (C (w <Lit_Chars echo>) (w <Lit_Chars subshell_PWD>)) ] ) right:<Right_Subshell ")"> is_last_cmd:F ) terminator:<Op_Semi ";"> ) (C (w <Lit_Chars echo>) (w <Lit_Chars comsub_PWD>)) ] ) right:<Eof_RParen ")"> ) ) ) terminator:<Op_Semi ";"> ) (C (w <Lit_Chars echo>) (w <Lit_Chars two>)) ] ) (command.CommandList children:[ (C (w (CommandSub left_token:<Left_DollarParen "$("> child:(command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w <Lit_Chars foo>)) arms_start:<KW_In in> arms:[ (CaseArm left:<Lit_Chars one> pattern:(pat.Words words:[(w <Lit_Chars one>)]) middle:<Right_CasePat ")"> action:[(C (w <Lit_Chars echo>) (w <Lit_Chars hi>))] right:<Op_DSemi ";;"> ) ] arms_end:<KW_Esac esac> ) right:<Eof_RParen ")"> ) ) ) ] ) (command.CommandList children:[ (command.Subshell left:<Op_LParen "("> child:(command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w <Lit_Chars foo>)) arms_start:<KW_In in> arms:[ (CaseArm left:<Lit_Chars one> pattern:(pat.Words words:[(w <Lit_Chars one>)]) middle:<Right_CasePat ")"> action:[(C (w <Lit_Chars echo>) (w <Lit_Chars hi>))] right:<Op_DSemi ";;"> ) ] arms_end:<KW_Esac esac> ...... errcmd=( "${SETUP_STATE[$err.cmd]}" ) ^ "<cmd_parse_test>":1: Unexpected token while parsing arithmetic: '.' ... ) right:<Right_Subshell ")"> is_last_cmd:F ) ] ) (C (w <Lit_Chars echo>) (w <Lit_Chars ab> (CommandSub left_token:<Left_DollarParen "$("> child:(C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) right:<Eof_RParen ")"> ) <Lit_Chars cd> ) (w <Lit_Chars ef>) ) (command.CommandList children:[ (command.Sentence child:(command.DBracket left:<KW_DLeftBracket "[["> expr:(bool_expr.Unary op_id:BoolUnary_n child:(w (DQ (BracedVarSub left:<Left_DollarBrace "${"> name_tok:<VSub_Name marks> var_name:marks bracket_op:(bracket_op.ArrayIndex expr:(w (${ VSub_Name tag_marker) <Lit_Digits 002> (${ VSub_Name cons_ptr) ) ) right:<Right_DollarBrace "}"> ) ) ) ) right:<Lit_DRightBracket "]]"> ) terminator:<Op_Semi ";"> ) ] ) (command.CommandList children:[ (C (w <Lit_Chars echo>) (w (word_part.ArithSub left:<Left_DollarDParen "$(("> anode:(w <Lit_Digits 0> <Lit_ArithVarLike x> ($ foo)) right:<Right_DollarDParen ")"> ) ) ) ] ) (command.CommandList children:[ (command.ShAssignment left:<Lit_VarLike "errcmd="> pairs:[ (AssignPair left:...0x7f499077e258 lhs:(sh_lhs.Name left:...0x7f499077e258 name:errcmd) op:assign_op.Equal rhs:(w (word_part.InitializerLiteral left:<Op_LParen "("> pairs:[ (InitializerWord.ArrayWord w:(w (DQ (BracedVarSub left:<Left_DollarBrace "${"> name_tok:<VSub_Name SETUP_STATE> var_name:SETUP_STATE bracket_op:(bracket_op.ArrayIndex expr:(w (DQ ($ err) <Lit_Chars .cmd>)) ) right:<Right_DollarBrace "}"> ) ) ) ) ] right:<Right_Initializer ")"> ) ) ) ] ) ] ) (command.CommandList children:[ (C (w <Lit_Chars echo>) (w (CommandSub left_token:<Left_DollarParen "$("> child:(command.NoOp) right:<Eof_RParen ")"> ) ) ) ] ) (command.CommandList children:[ (C (w <Lit_Chars echo>) (w (CommandSub left_token:<Left_Backtick "`"> child:(command.NoOp) right:<Backtick_Right "`"> ) ) ) ] ) (command.CommandList children:[ (C (w <Lit_Chars cmd>) (w <Lit_Chars flag>) (w (CommandSub left_token:<Left_Backtick "`"> child:(command.NoOp) right:<Backtick_Right "`"> ) ) (w <Lit_Chars flag2>) ) ] ) (command.CommandList children:[ (command.ShAssignment left:<Lit_VarLike "FOO="> pairs:[ (AssignPair left:...0x7f499091bef0 lhs:(sh_lhs.Name left:...0x7f499091bef0 name:FOO) op:assign_op.Equal rhs:(w (DQ <Lit_Chars bar>) (CommandSub left_token:<Left_Backtick "`"> child:(command.NoOp) right:<Backtick_Right "`"> ) (DQ <Lit_Chars baz>) ) ) ] ) ] ) (command.CommandList children:[ (command.If if_kw:<KW_If if> arms:[ (IfArm keyword:...0x7f499077eef0 cond:(List_of_command (command.Sentence child:(C (w <Lit_Chars "true">)) terminator:<Op_Semi ";"> ) ) then_kw:<KW_Then then> action:[ . (command.Subshell left:<Op_LParen "("> child:(C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) right:<Right_Subshell ")"> is_last_cmd:F ) ] then_tok:...0x7f4990960530 ) ] else_action:[] fi_kw:<KW_Fi fi> ) ] ) (command.CommandList children:[ (command.WhileUntil keyword:<KW_While while> cond:(List_of_command (command.Sentence child:(C (w <Lit_Chars "true">)) terminator:<Op_Semi ";"> ) ) body:(command.DoGroup left:<KW_Do do> children:[ (BraceGroup left:<Lit_LBrace "{"> children:[ (C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) (command.ControlFlow keyword:<ControlFlow_Break break>) ] right:<Lit_RBrace "}"> ) ] right:<KW_Done done> ) ) ] ) (command.CommandList children:[ (command.If if_kw:<KW_If if> arms:[ (IfArm keyword:...0x7f4990960390 cond:(List_of_command (command.Sentence child:(C (w <Lit_Chars "true">)) terminator:<Op_Semi ";"> ) ) then_kw:<KW_Then then> action:[ (command.Subshell left:<Op_LParen "("> child:(C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) right:<Right_Subshell ")"> is_last_cmd:F ) ] then_tok:...0x7f499077ee88 ) ] else_action:[] fi_kw:<KW_Fi fi> ) ] ) (command.CommandList children:[ (command.If if_kw:<KW_If if> arms:[ (IfArm keyword:...0x7f49907b2050 cond:(List_of_command (command.Sentence child:(C (w <Lit_Chars "true">)) terminator:<Op_Semi ";"> ) ) then_kw:<KW_Then then> action:[ (command.If if_kw:<KW_If if> arms:[ (IfArm keyword:...0x7f49907b2460 cond:(List_of_command (command.Sentence child:(C (w <Lit_Chars "true">)) terminator:<Op_Semi ";"> ) ) then_kw:<KW_Then then> action:[(C (w <Lit_Chars echo>) (w <Lit_Chars hi>))] then_tok:...0x7f49907b26d0 ) ] else_action:[] fi_kw:<KW_Fi fi> ) ] then_tok:...0x7f49907b2328 ) ] else_action:[] fi_kw:<KW_Fi fi> ) (C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) ] ) (command.CommandList children:[ (command.Subshell left:<Op_LParen "("> child:(command.AndOr children:[ (C (w <Lit_Chars cd>) (w (DQ ($ PACKDIR)))) (command.ForEach keyword:<KW_For for> iter_names:[e] iterable:(for_iter.Words words:[(w ($ existing))]) body:(command.DoGroup left:<KW_Do do> children:[ (command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w (DQ <Lit_Chars " "> ($ fullbases) <Lit_Chars " ">)) ) arms_start:<KW_In in> arms:[ (CaseArm left:<Lit_Star "*"> pattern:(pat.Words words:[ (w <Lit_Star "*"> (DQ <Lit_Chars " "> ($ e) <Lit_Chars " ">) <Lit_Star "*"> ) ] ) middle:<Right_CasePat ")"> action:[] right:<Op_DSemi ";;"> ) ........ (CaseArm left:<Lit_Star "*"> pattern:(pat.Words words:[(w <Lit_Star "*">)]) middle:<Right_CasePat ")"> action:[ (C (w <Lit_Chars rm>) (w <Lit_Chars -f>) (w (DQ ($ e) <Lit_Chars .pack>)) (w (DQ ($ e) <Lit_Chars .idx>)) (w (DQ ($ e) <Lit_Chars .keep>)) ) ] right:<Op_DSemi ";;"> ) ] arms_end:<KW_Esac esac> ) ] right:<KW_Done done> ) ) ] ops:[<Op_DAmp "&&">] ) right:<Right_Subshell ")"> is_last_cmd:F ) ] ) (command.CommandList children:[ (command.Sentence child:(C (w <Lit_Chars .>) (w (DQ ($ TEST_DIRECTORY)) <Lit_Slash /> <Lit_Chars diff-lib.sh>) ) terminator:<Op_Semi ";"> ) ] ) (command.CommandList children:[ (C (w <Lit_Chars echo>) (w <Lit_Chars foo> <Lit_Pound "#"> <Lit_Chars bar>)) ] ) (command.CommandList children:[(C (w <Lit_Chars echo>) (w <Lit_Chars foo>))]) (command.CommandList children:[(C (w <Lit_Chars echo>) (w <Lit_Chars foo>))]) (command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w (DQ ($ fd) <Lit_Chars ","> ($ command)))) arms_start:<KW_In in> arms:[ (CaseArm left:<Lit_Chars 3> pattern:(pat.Words words:[ (w <Lit_Chars 3> <Lit_Comma ","> <Lit_Pound "#"> <Lit_Star "*">) (w <Lit_Chars 3> <Lit_Comma ",">) ] ) middle:<Right_CasePat ")"> action:[] right:<Op_DSemi ";;"> ) ] arms_end:<KW_Esac esac> ) (command.CommandList children:[ (command.Case case_kw:<KW_Case case> to_match:(case_arg.Word w:(w <Lit_Chars foo>)) arms_start:<KW_In in> arms:[ (CaseArm left:<Left_DollarSingleQuote "$'"> pattern:(pat.Words words:[ (w (SingleQuoted left:<Left_DollarSingleQuote "$'"> sval:"'" right:<Right_SingleQuote "'"> ) ) ] ) middle:<Right_CasePat ")"> action:[ (command.ShAssignment left:<Lit_VarLike "ret+="> pairs:[ (AssignPair left:...0x7f499077ece8 lhs:(sh_lhs.Name left:...0x7f499077ece8 name:ret) op:assign_op.PlusEqual rhs:(w (DQ (word_part.EscapedLiteral token:<Lit_EscapedChar "\\\\"> ch:"\\" ) ) (word_part.EscapedLiteral token:<Lit_EscapedChar "\\'"> ch:"'" ) ) ) ] ) ] right:<Op_DSemi ";;"> ) ] arms_end:<KW_Esac esac> ) ] ) (command.CommandList children:[ (C (w (SingleQuoted left:<Left_DollarSingleQuote "$'"> sval:"abc\ndef" right:<Right_SingleQuote "'"> ) ) ) ] ) (command.Redirect child:(C (w <Lit_Chars echo>) (w <Lit_Chars hi>)) redirects:[ (Redir op:<Redir_Clobber ">|"> loc:(redir_loc.Fd fd:1) arg:(w <Lit_Chars clobbered.txt>) ) ] ) (Redir op:<Redir_GreatAnd "1>&"> loc:(redir_loc.Fd fd:1) arg:(w <Lit_Chars 2>)) (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EOF>) stdin_parts:[]) ) (Redir op:<Redir_DLessDash "<<-"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EOF>) stdin_parts:[]) ) (command.Redirect child:(C (w <Lit_Chars cat>)) redirec.......... ====================================================================== ERROR: testArrayLiteral (__main__.ArrayTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/uke/oil/osh/cmd_parse_test.py", line 402, in testArrayLiteral self.assertEqual([], node.pairs[0].rhs.parts[0].words) # No words AttributeError: 'InitializerLiteral' object has no attribute 'words' ---------------------------------------------------------------------- Ran 83 tests in 0.447s FAILED (errors=1) ts:[ (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EOF>) here_end_tok:<Undefined_Tok "EOF\n"> stdin_parts:[<Lit_Chars "hi\n">] ) ) (Redir op:<Redir_Great ">"> loc:(redir_loc.Fd fd:1) arg:(w <Lit_Chars out.txt>) ) ] ) (Redir op:<Redir_Great ">"> loc:(redir_loc.Fd fd:1) arg:(w <Lit_Chars out.txt>)) (Redir op:<Redir_DLess "<<"> loc:(redir_loc.Fd fd:0) arg:(redir_param.HereDoc here_begin:(w <Lit_Chars EOF>) stdin_parts:[]) ) (command.Redirect child:(C (w <Lit_Chars cat>)) redirects:[ (Redir op:<Redir_Great ">"> loc:(redir_loc.Fd fd:1) arg:(w <Lit_Chars out.txt>) ) (Redir op:<Redir_GreatAnd "1>&"> loc:(redir_loc.Fd fd:1) arg:(w <Lit_Chars 2>) ) ] ) (command.Redirect child:(C (w <Lit_Chars cat>)) redirects:[ (Redir op:<Redir_LessAnd "<&"> loc:(redir_loc.Fd fd:0) arg:(w <Lit_Chars 3>) ) ] ) (command.CommandList children:[ (command.ShAssignment left:<Lit_VarLike "ONE="> pairs:[ (AssignPair left:...0x7f499091bf58 lhs:(sh_lhs.Name left:...0x7f499091bf58 name:ONE) op:assign_op.Equal rhs:(w <Lit_Chars 1>) ) (AssignPair left:<Lit_VarLike "TWO="> lhs:(sh_lhs.Name left:...0x7f4990960ce8 name:TWO) op:assign_op.Equal rhs:(w <Lit_Chars 2>) ) ] ) ] ) (command.CommandList children:[ (command.Redirect child:(command.NoOp) redirects:[ (Redir op:<Redir_Great ">"> loc:(redir_loc.Fd fd:1) arg:(w <Lit_Chars out.txt>) ) ] ) ] ) (C (w <Lit_Chars echo>) (w (DQ <Lit_Chars one>) <Lit_Chars two>) (w (DQ <Lit_Chars three>) (DQ <Lit_Chars four>)) (w <Lit_Chars five>) ) (command.CommandList children:[ (command.Redirect child:(command.Simple blame_tok:<Lit_Chars env> more_env:[ (EnvPair left:<Lit_VarLike "PYTHONPATH="> name:PYTHONPATH val:(w <Lit_Chars .>) ) ] words:[(w <Lit_Chars env>)] is_last_cmd:F ) redirects:[ (Redir op:<Redir_Great ">"> loc:(redir_loc.Fd fd:1) arg:(w <Lit_Chars out.txt>) ) ] ) ] ) (command.CommandList children:[ (command.Redirect child:(C (w <Lit_Chars echo>) (w <Lit_Chars 1>) (w <Lit_Chars 2>) (w <Lit_Chars 3>) ) redirects:[ (Redir op:<Redir_Great ">"> loc:(redir_loc.Fd fd:1) arg:(w <Lit_Chars out.txt>) ) ] ) ] ) (C (w <Lit_Chars ls>) (w <Lit_Chars foo>)) (command.Simple blame_tok:<Lit_Chars ls> more_env:[ (EnvPair left:<Lit_VarLike "FOO="> name:FOO val:(w <Lit_Chars bar>)) ] words:[(w <Lit_Chars ls>) (w <Lit_Chars foo>)] is_last_cmd:F ) (command.Redirect child:(command.Simple blame_tok:<Lit_Chars ls> more_env:[ (EnvPair left:<Lit_VarLike "FOO="> name:FOO val:(w <Lit_Chars bar>)) (EnvPair left:<Lit_VarLike "SPAM="> name:SPAM val:(w <Lit_Chars eggs>)) ] words:[(w <Lit_Chars ls>) (w <Lit_Chars foo>)] is_last_cmd:F ) redirects:[ (Redir op:<Redir_Great ">"> loc:(redir_loc.Fd fd:1) arg:(w <Lit_Chars output.txt>) ) ] ) (command.Redirect child:(command.Simple blame_tok:<Lit_Chars ls> more_env:[ (EnvPair left:<Lit_VarLike "FOO="> name:FOO val:(w <Lit_Chars bar>)) (EnvPair left:<Lit_VarLike "SPAM="> name:SPAM val:(w <Lit_Chars eggs>)) ] words:[(w <Lit_Chars ls>) (w <Lit_Chars foo>)] is_last_cmd:F ) redirects:[ (Redir op:<Redir_Great ">"> loc:(redir_loc.Fd fd:1) arg:(w <Lit_Chars output.txt>) ) (Redir op:<Redir_Great ">"> loc:(redir_loc.Fd fd:1) arg:(w <Lit_Chars output2.txt>) ) ] ) FAIL: osh/cmd_parse_test.py with code 1