(command.CommandList children: [ (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [ {<Id.Lit_Colon ':'>} { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name TEST_SH> var_name: TEST_SH suffix_op: (suffix_op.Unary op:<Id.VTest_ColonEquals _> arg_word:{(DQ <'/bin/sh'>)}) right: <Id.Right_DollarBrace '}'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<basic_test_method_test>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <basic_test_method_test_head> name: basic_test_method_test_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Tests that test method works as expected'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <basic_test_method_test_body> name: basic_test_method_test_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'wc -l'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [<'echo hello\n'>] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> <hello>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [<'echo hello\n'>] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> <1>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'wc -l'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [<'echo hello\\\n'> <'world\n'>] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> <helloworld>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [<'echo hello\\\n'> <'world\n'>] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> <2>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'wc -l'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(SQ <'%s\\n%s\\n%s\\n'>)} {<Line1>} {<Line2>} {<Line3>}] redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<File>})] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'Line1\\nLine2\\nLine3\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'cat File'>)} ] redirects: [] do_fork: T ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'set -- X "" \'\' Y\n'> <'echo ARGS="${#}"\n'> <'echo \'\' -$1- -$2- -$3- -$4-\n'> <'cat <<EOF\n'> <'X=$1\n'> <'EOF\n'> <'cat <<\\EOF\n'> <'Y=$4\n'> <'EOF\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> <Id.Lit_VarLike 'ARGS='> <4>} {<-o>} {<match> <Id.Lit_Colon ':'> (SQ <'-X- -- -- -Y-'>)} {<-o>} {<match> <Id.Lit_Colon ':'> <Id.Lit_VarLike 'X='> <X>} {<-o>} {<match> <Id.Lit_Colon ':'> (SQ <'Y=\\$4'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<do_input_redirections>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <do_input_redirections_head> name: do_input_redirections_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Tests that simple input redirection works'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <do_input_redirections_body> name: do_input_redirections_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(SQ <'%s\\n%s\\n%s\\nEND\\n'>)} {(SQ <'First Line'>)} {(SQ <'Second Line'>)} {(SQ <'Line 3'>)} ] redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<File>})] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\n'>)} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'cat < File'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\n'>)} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'cat <File'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\n'>)} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'cat< File'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\n'>)} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'cat < "File"'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\n'>)} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'< File cat'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <ln> more_env: [] words: [{<ln>} {<File>} {<wc>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\n'>)} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'< wc cat'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <mv> more_env: [] words: [{<mv>} {<wc>} {<cat>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<match> <Id.Lit_Colon ':'> <4>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'< cat wc'>)} ] redirects: [] do_fork: T ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <EOF>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'for l in 1 2 3; do\n'> <'read line < File\n'> <'echo "$line"\n'> <'done\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nFirst Line\\nFirst Line\\n'>)} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <EOF>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'for l in 1 2 3; do\n'> <'read line\n'> <'echo "$line"\n'> <'done <File\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\n'>)} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <EOF>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'for l in 1 2 3; do\n'> <'read line < File\n'> <'echo "$line"\n'> <'done <File\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nFirst Line\\nFirst Line\\n'>)} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <EOF>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'line=\n'> <'while [ "$line" != END ]; do\n'> <'read line || exit 1\n'> <'echo "$line"\n'> <'done <File\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\n'>)} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <EOF>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'while :; do\n'> <'read line || exit 0\n'> <'echo "$line"\n'> <'done <File\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\n'>)} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <EOF>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'l=\'\'\n'> <'while read line < File\n'> <'do\n'> <'echo "$line"\n'> <'l="${l}x"\n'> <'[ ${#l} -ge 3 ] && break\n'> <'done\n'> <'echo DONE\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nFirst Line\\nFirst Line\\nDONE\\n'>) } {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <EOF>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'while read line\n'> <'do\n'> <'echo "$line"\n'> <'done <File\n'> <'echo DONE\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\nDONE\\n'>) } {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <EOF>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'l=\'\'\n'> <'while read line\n'> <'do\n'> <'echo "$line"\n'> <'l="${l}x"\n'> <'[ ${#l} -ge 3 ] && break\n'> <'done <File\n'> <'echo DONE\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nDONE\\n'>)} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <EOF>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'l=\'\'\n'> <'while read line1 <File\n'> <'do\n'> <'read line2\n'> <'echo "$line1":"$line2"\n'> <'l="${l}x"\n'> <'[ ${#l} -ge 2 ] && break\n'> <'done <File\n'> <'echo DONE\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'First Line:First Line\\nFirst Line:Second Line\\nDONE\\n'>) } {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<do_output_redirections>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <do_output_redirections_head> name: do_output_redirections_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Test Output redirections'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <do_output_redirections_body> name: do_output_redirections_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'nl='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'nl='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'nl='> name:nl) op: assign_op.Equal rhs: {(SQ <'\n'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'T='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'T='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'T='> name:T) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShFunction name_tok: <i> name: i body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'T='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'T='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'T='> name:T) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {(DQ ($ Id.VSub_DollarName T))} {<Id.Lit_Other '+'>} {<1>} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.AndOr children: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {<Output>}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-f>} {<Output>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [{<atf_fail>} {(DQ <'Unable to remove Output file'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.Sentence child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'> Output'>)} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-f>} {<Output>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} {(DQ <'#'> ($ Id.VSub_DollarName T) <': Did not make Output file'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {<Output>}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Sentence child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'>> Output'>)} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-f>} {<Output>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} {(DQ <'#'> ($ Id.VSub_DollarName T) <': Did not make Output file'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {<Output>}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Sentence child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'>| Output'>)} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-f>} {<Output>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} {(DQ <'#'> ($ Id.VSub_DollarName T) <': Did not make Output file'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {<Output>}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <i> more_env: [] words: [{<i>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo Hello >Output'>)} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-s>} {<Output>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} {(DQ <'#'> ($ Id.VSub_DollarName T) <': Did not make non-empty Output file'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Output>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {<Id.Lit_Equals '='>} {(DQ <Hello>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Output: Should be \'Hello\' is \''> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Output>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'\''> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <i> more_env: [] words: [{<i>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo Hello>!Output'>)} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-s>} {<Output>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} {(DQ <'#'> ($ Id.VSub_DollarName T) <': Did not make non-empty Output file'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Output>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {<Id.Lit_Equals '='>} {(DQ <Hello>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Output: Should be \'Hello\' is \''> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Output>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'\''> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <i> more_env: [] words: [{<i>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo Bye >>Output'>)} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-s>} {<Output>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [{<atf_fail>} {(DQ <'#'> ($ Id.VSub_DollarName T) <': Removed Output file'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Output>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {<Id.Lit_Equals '='>} {(DQ <Hello> (${ Id.VSub_Name nl) <Bye>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Output: Should be \'Hello'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) <'nBye\' is \''> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Output>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'\''> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Sentence child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'line 1\\nline 2\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo line 1 > Output; echo line 2 >> Output; cat Output'>)} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Output>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {<Id.Lit_Equals '='>} {(DQ <'line 1'> (${ Id.VSub_Name nl) <'line 2'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Output: Should be \'line 1'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) <'nline 2\' is \''> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Output>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'\''> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Sentence child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'line 2\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo line 1 > Output; echo line 2'>)} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Output>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {<Id.Lit_Equals '='>} {(DQ <'line 1'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Output: Should be \'line 1\' is \''> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Output>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'\''> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Sentence child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'(echo line 1; echo line 2 > Out2) > Out1'>)} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Out1>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {<Id.Lit_Equals '='>} {(DQ <'line 1'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Out1: Should be \'line 1\' is \''> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Out1>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'\''> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Out2>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {<Id.Lit_Equals '='>} {(DQ <'line 2'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Out2: Should be \'line 2\' is \''> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Out2>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'\''> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Sentence child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'{ echo line 1; echo line 2 > Out2;} > Out1'>)} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Out1>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {<Id.Lit_Equals '='>} {(DQ <'line 1'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Out1: Should be \'line 1\' is \''> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Out1>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'\''> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Out2>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {<Id.Lit_Equals '='>} {(DQ <'line 2'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Out2: Should be \'line 2\' is \''> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Out2>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'\''> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Sentence child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T) terminator: <Id.Op_Semi _> ) (command.AndOr children: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {<Out1>} {<Out2>}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <EOF>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'for arg in \'line 1\' \'line 2\' \'line 3\'\n'> <'do\n'> <'echo "$arg"\n'> <'echo "$arg" > Out1\n'> <'done > Out2\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Out1>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {<Id.Lit_Equals '='>} {(DQ <'line 3'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Out1: Should be \'line 3\' is \''> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Out1>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'\''> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Out2>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {<Id.Lit_Equals '='>} {(DQ <'line 1'> (${ Id.VSub_Name nl) <'line 2'> (${ Id.VSub_Name nl) <'line 3'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Out2: Should be \'line 1'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) <'nline 2'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'> ch:'\\') <'nline 3\' is \''> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Out2>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'\''> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Sentence child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T) terminator: <Id.Op_Semi _> ) (command.AndOr children: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {<Out1>} {<Out2>}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <EOF>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'for arg in \'line 1\' \'line 2\' \'line 3\'\n'> <'do\n'> <'echo "$arg"\n'> <'echo "$arg" >> Out1\n'> <'done > Out2\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Out1>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {<Id.Lit_Equals '='>} {(DQ <'line 1'> (${ Id.VSub_Name nl) <'line 2'> (${ Id.VSub_Name nl) <'line 3'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Out1: Should be \'line 1'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) <'nline 2'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'> ch:'\\') <'nline 3\' is \''> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Out1>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'\''> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Out2>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {<Id.Lit_Equals '='>} {(DQ <'line 1'> (${ Id.VSub_Name nl) <'line 2'> (${ Id.VSub_Name nl) <'line 3'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Out2: Should be \'line 1'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) <'nline 2'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'> ch:'\\') <'nline 3\' is \''> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Out2>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'\''> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<fd_redirections>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <fd_redirections_head> name: fd_redirections_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [ {<atf_set>} {(DQ <descr>)} {(DQ <'Tests redirections to/from specific descriptors'>)} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <fd_redirections_body> name: fd_redirections_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_require_prog> more_env: [] words: [{<atf_require_prog>} {<'/bin/echo'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'f() {\n'> <'/bin/echo nothing "$1" >& "$1"\n'> <'}\n'> <'for n\n'> <'do\n'> <'eval "f $n $n"\'> file-$n\'\n'> <'done\n'> ] ) ) (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<helper.sh>} ) ] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'f() {\n'> <'(read -r var; echo "${var}") <&"$1"\n'> <'}\n'> <'for n\n'> <'do\n'> <'x=$( eval "f $n $n"\'< file-$n\' )\n'> <'test "${x}" = "nothing $n" || echo "$n"\n'> <'done\n'> ] ) ) (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<reread.sh>} ) ] do_fork: T ) (command.ShFunction name_tok: <validate> name: validate body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ForEach keyword: <Id.KW_For for> iter_names: [n] iterable: (for_iter__Args) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-e>} {(DQ <file-> ($ Id.VSub_DollarName n))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} {(DQ <file-> ($ Id.VSub_DollarName n) <' not created'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'C='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'C='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'C='> name:C) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<file-> (DQ ($ Id.VSub_DollarName n))}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {(DQ ($ Id.VSub_DollarName C))} {<Id.Lit_Equals '='>} {(DQ <'nothing '> ($ Id.VSub_DollarName n))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <file-> ($ Id.VSub_DollarName n) <' contains \''> ($ Id.VSub_DollarName C) <'\' not \'nothing '> ($ Id.VSub_DollarName n) <'\''> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<helper.sh>} {<1>} {<2>} {<3>} {<4>} {<5>} {<6>} {<7>} {<8>} {<9>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <validate> more_env: [] words: [{<validate>} {<1>} {<2>} {<3>} {<4>} {<5>} {<6>} {<7>} {<8>} {<9>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<reread.sh>} {<3>} {<4>} {<5>} {<6>} {<7>} {<8>} {<9>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'L='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'L='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'L='> name:L) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <ulimit> more_env: [] words: [{<ulimit>} {<-n>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName L))} {<-ge>} {<30>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<helper.sh>} {<10>} {<15>} {<19>} {<20>} {<25>} {<29>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <validate> more_env: [] words: [{<validate>} {<10>} {<15>} {<19>} {<20>} {<25>} {<29>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<reread.sh>} {<10>} {<15>} {<19>} {<20>} {<25>} {<29>} ] redirects: [] do_fork: T ) ] spids: [2722 2737] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName L))} {<-ge>} {<100>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<helper.sh>} {<32>} {<33>} {<49>} {<50>} {<51>} {<63>} {<64>} {<65>} {<77>} {<88>} {<99>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <validate> more_env: [] words: [ {<validate>} {<32>} {<33>} {<49>} {<50>} {<51>} {<63>} {<64>} {<65>} {<77>} {<88>} {<99>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<reread.sh>} {<32>} {<33>} {<49>} {<50>} {<51>} {<63>} {<64>} {<65>} {<77>} {<88>} {<99>} ] redirects: [] do_fork: T ) ] spids: [2832 2847] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName L))} {<-ge>} {<500>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<helper.sh>} {<100>} {<101>} {<199>} {<200>} {<222>} {<333>} {<444>} {<499>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <validate> more_env: [] words: [{<validate>} {<100>} {<101>} {<199>} {<200>} {<222>} {<333>} {<444>} {<499>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<reread.sh>} {<100>} {<101>} {<199>} {<200>} {<222>} {<333>} {<444>} {<499>} ] redirects: [] do_fork: T ) ] spids: [2972 2987] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName L))} {<-gt>} {<1005>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<helper.sh>} {<1000>} {<1001>} {<1002>} {<1003>} {<1004>} {<1005>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <validate> more_env: [] words: [{<validate>} {<1000>} {<1001>} {<1002>} {<1003>} {<1004>} {<1005>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<reread.sh>} {<1000>} {<1001>} {<1002>} {<1003>} {<1004>} {<1005>} ] redirects: [] do_fork: T ) ] spids: [3094 3109] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<local_redirections>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <local_redirections_head> name: local_redirections_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [ {<atf_set>} {(DQ <descr>)} {(DQ <'Tests that exec can reassign file descriptors in the shell itself'>)} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <local_redirections_body> name: local_redirections_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'for f\n'> <'do\n'> <'eval "exec $f"\'> file-$f\'\n'> <'done\n'> <'\n'> <'for f\n'> <'do\n'> <'printf \'%s\\n\' "Hello $f" >&"$f"\n'> <'done\n'> <'\n'> <'for f\n'> <'do\n'> <'eval "exec $f"\'>&-\'\n'> <'done\n'> <'\n'> <'for f\n'> <'do\n'> <'eval "exec $f"\'< file-$f\'\n'> <'done\n'> <'\n'> <'for f\n'> <'do\n'> <'exec <& "$f"\n'> <'read -r var || echo >&2 "No data in file-$f"\n'> <'read -r x && echo >&2 "Too much data in file-${f}: $x"\n'> <'test "${var}" = "Hello $f" ||\n'> <' echo >&2 "file-$f contains \'${var}\' not \'Hello $f\'"\n'> <'done\n'> ] ) ) (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<helper.sh>} ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<helper.sh>} {<3>} {<4>} {<5>} {<6>} {<7>} {<8>} {<9>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'L='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'L='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'L='> name:L) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <ulimit> more_env: [] words: [{<ulimit>} {<-n>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName L))} {<-ge>} {<30>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<helper.sh>} {<10>} {<11>} {<13>} {<15>} {<16>} {<19>} {<20>} {<28>} {<29>} ] redirects: [] do_fork: T ) ] spids: [3330 3345] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName L))} {<-ge>} {<100>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<helper.sh>} {<30>} {<31>} {<32>} {<63>} {<64>} {<65>} {<77>} {<88>} {<99>} ] redirects: [] do_fork: T ) ] spids: [3394 3409] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName L))} {<-ge>} {<500>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<helper.sh>} {<100>} {<101>} {<111>} {<199>} {<200>} {<201>} {<222>} {<333>} {<499>} ] redirects: [] do_fork: T ) ] spids: [3458 3473] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName L))} {<-ge>} {<1005>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<helper.sh>} {<1000>} {<1001>} {<1002>} {<1003>} {<1004>} {<1005>} ] redirects: [] do_fork: T ) ] spids: [3522 3537] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<named_fd_redirections>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <named_fd_redirections_head> name: named_fd_redirections_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Tests redirections to /dev/stdout (etc)'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <named_fd_redirections_body> name: named_fd_redirections_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-c>} {<'/dev/stdout'>}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'OK\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo OK >/dev/stdout'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'OK\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'/bin/echo OK >/dev/stdout'>)} ] redirects: [] do_fork: T ) ] spids: [3613 3622] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-c>} {<'/dev/stdin'>}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <atf_require_prog> more_env: [] words: [{<atf_require_prog>} {<cat>}] redirects: [] do_fork: T ) (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<GOOD>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'GOOD\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'read var </dev/stdin; echo $var'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<GOOD>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'GOOD\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'cat </dev/stdin'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] spids: [3695 3704] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-c>} {<'/dev/stderr'>}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<inline> <Id.Lit_Colon ':'> (SQ <'OK\\n'>)} {<-o>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo OK 2>/dev/stderr >&2'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<inline> <Id.Lit_Colon ':'> (SQ <'OK\\n'>)} {<-o>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'/bin/echo OK 2>/dev/stderr >&2'>)} ] redirects: [] do_fork: T ) ] spids: [3795 3804] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-c>} {<'/dev/fd/8'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-c>} {<'/dev/fd/9'>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'EIGHT\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} { (SQ <'printf "%s\\n" EIGHT 8>&1 >/dev/fd/8 |\n'> <'\t\t\t\t\tcat 9<&0 </dev/fd/9'> ) } ] redirects: [] do_fork: T ) ] spids: [3877 3894] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<redir_in_case>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <redir_in_case_head> name: redir_in_case_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [ {<atf_set>} {(DQ <descr>)} {(DQ <'Tests that sh(1) allows just redirections '>)} {(DQ <'in case statements. (PR bin/48631)'>)} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <redir_in_case_body> name: redir_in_case_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'case x in (whatever) >foo;; esac'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'case x in (whatever) >foo 2>&1;; esac'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'case x in (whatever) >foo 2>&1 </dev/null;; esac'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'case x in (whatever) >${somewhere};; esac'>)} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<incorrect_redirections>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <incorrect_redirections_head> name: incorrect_redirections_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [ {<atf_set>} {(DQ <descr>)} {(DQ <'Tests that sh(1) correctly ignores non-redirections'>)} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <incorrect_redirections_body> name: incorrect_redirections_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<not-empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo foo>'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<not-empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'read foo<'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<not-empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo foo<>'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<not-empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo x > '>) (DQ ($ Id.VSub_DollarName nl))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<not-empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'read x < '>) (DQ ($ Id.VSub_DollarName nl))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<not-empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo x <> '>) (DQ ($ Id.VSub_DollarName nl))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<not-empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo x >< anything'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<not-empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo x >>< anything'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<not-empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo x >|< anything'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<not-empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo x > ; read x < /dev/null || echo bad'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<not-empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'read x < & echo y > /dev/null; wait && echo bad'>)} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {<Output>}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'A Line > Output\\n'>)} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo A Line \\> Output'>)} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-f>} {<Output>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_file> more_env: [] words: [{<atf_file>} {(DQ <'File \'Output\' appeared and should not have'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {<Output>}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo A Line \\>> Output'>)} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-f>} {<Output>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_file> more_env: [] words: [{<atf_file>} {(DQ <'File \'Output\' not created when it should'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Output>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {<Id.Lit_Equals '='>} {(SQ <'A Line >'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <'Output file contains \''> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<Output>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'\' instead of \''> ) (SQ <'A Line >'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <rm> more_env: [] words: [ {<rm>} {<-f>} {<Output>} {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\>'> ch:'>')} ] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'echo A Line >\\> Output'>)} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-f>} {<Output>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_file> more_env: [] words: [{<atf_file>} {(DQ <'File \'Output\' appeared and should not have'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-f>} {(SQ <'>'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_file> more_env: [] words: [{<atf_file>} {(DQ <'File \'>\' not created when it should'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {(SQ <'>'>)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {<Id.Lit_Equals '='>} {(SQ <'A Line Output'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <'Output file (\'>\') contains \''> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {(SQ <'>'>)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'\' instead of \'A Line Output\''> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<redir_here_doc>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <redir_here_doc_head> name: redir_here_doc_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [ {<atf_set>} {(DQ <descr>)} {(DQ <'Tests that sh(1) correctly processes \'here\' doc '>)} {(DQ <'input redirections'>)} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <redir_here_doc_body> name: redir_here_doc_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [<'cat <<EOF\n'> <'printf \'%s\\n\' \'hello\\n\'\n'> <'EOF\n'>] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> <printf>} {<-o>} {<match> <Id.Lit_Colon ':'> (SQ <'hello\\\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<subshell_redirections>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <subshell_redirections_head> name: subshell_redirections_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [ {<atf_set>} {(DQ <descr>)} {(DQ <'Tests redirection interactions between shell and '>)} {(DQ <'its sub-shell(s)'>)} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <subshell_redirections_body> name: subshell_redirections_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_require_prog> more_env: [] words: [{<atf_require_prog>} {<cat>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'LIM='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'LIM='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'LIM='> name:LIM) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <ulimit> more_env: [] words: [{<ulimit>} {<-n>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'exec 6>output-file\n'> <'\n'> <'( printf "hello\\n" >&6 )\n'> <'\n'> <'exec 8<output-file\n'> <'\n'> <'( read hello <&8 ; test hello = "$hello" || echo >&2 Hello )\n'> <'\n'> <'( printf "bye-bye\\n" >&6 )\n'> <'\n'> <'( exec 8<&- )\n'> <'read bye <&8 || echo >&2 "Closed?"\n'> <'echo Bye="$bye"\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<match> <Id.Lit_Colon ':'> <Id.Lit_VarLike 'Bye='> <bye-bye>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'for arg in one-4 two-24 three-14\n'> <'do\n'> <'fd=${arg#*-}\n'> <'file=${arg%-*}\n'> <'eval "exec ${fd}>${file}"\n'> <'done\n'> <'\n'> <'for arg in one-5 two-7 three-19\n'> <'do\n'> <'fd=${arg#*-}\n'> <'file=${arg%-*}\n'> <'eval "exec ${fd}<${file}"\n'> <'done\n'> <'\n'> <'(\n'> <'echo line-1 >&4\n'> <'echo line-2 >&24\n'> <'echo line-3 >&14\n'> <'echo go\n'> <') | (\n'> <'read go\n'> <'read x <&5\n'> <'read y <&7\n'> <'read z <&19\n'> <'\n'> <'printf "%s\\n" "${x}" "${y}" "${z}"\n'> <')\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'line-1\\nline-2\\nline-3\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'for arg in one-4-5 two-6-7 three-8-9 four-11-10 five-3-12\n'> <'do\n'> <'ofd=${arg##*-}\n'> <'file=${arg%-*}\n'> <'ifd=${file#*-}\n'> <'file=${file%-*}\n'> <'eval "exec ${ofd}>${file}"\n'> <'eval "exec ${ifd}<${file}"\n'> <'done\n'> <'\n'> <'( ( ( echo line-1 >& 13 ) 13>&12 ) 12>&5 ) >stdout 2>errout\n'> <'( ( ( echo line-2 >& 4) 13>&12 ) 4>&7 ) >>stdout 2>>errout\n'> <'( ( ( echo line-3 >& 6) 8>&1 6>&11 >&12) 11>&9 >&7 ) >>stdout\n'> <'\n'> <'( ( ( cat <&13 >&12 ) 13<&8 12>&10 ) 10>&1 8<&6 ) 6<&4\n'> <'( ( ( cat <&4 ) <&4 6<&8 8<&11 )\n'> <'<&4 4<&6 6<&8 8<&11 ) <&4 4<&6 6<&8 8<&11 11<&3\n'> <'( ( ( cat <&7 >&1 ) 7<&6 >&10 ) 10>&2 6<&8 ) 2>&1\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'line-1\\nline-2\\nline-3\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<ulimit_redirection_interaction>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <ulimit_redirection_interaction_head> name: ulimit_redirection_interaction_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [ {<atf_set>} {(DQ <descr>)} {(DQ <'Tests interactions between redirect and ulimit -n '>)} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <ulimit_redirection_interaction_body> name: ulimit_redirection_interaction_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_require_prog> more_env: [] words: [{<atf_require_prog>} {<ls>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'oLIM=$(ulimit -n)\n'> <'HRD=$(ulimit -H -n)\n'> <'test "${oLIM}" -lt "${HRD}" && ulimit -n "${HRD}"\n'> <'LIM=$(ulimit -n)\n'> <'\n'> <'FDs=\n'> <'LFD=-1\n'> <'while [ ${LIM} -gt 16 ]\n'> <'do\n'> <'FD=$(( ${LIM} - 1 ))\n'> <'if [ "${FD}" -eq "${LFD}" ]; then\n'> <'echo >&2 "Infinite loop... (busted $(( )) ??)"\n'> <'exit 1\n'> <'fi\n'> <'LFD="${FD}"\n'> <'\n'> <'eval "exec ${FD}"\'> /dev/null\'\n'> <'FDs="${FD}${FDs:+ }${FDs}"\n'> <'\n'> <'(\n'> <'FD=$(( ${LIM} + 1 ))\n'> <'eval "exec ${FD}"\'> /dev/null\'\n'> <'echo "Reached unreachable command"\n'> <') 2>/dev/null && echo >&2 "Opened beyond limit!"\n'> <'\n'> <'(eval \'ls 2>&1 3>&1 4>&1 5>&1 \'"${FD}"\'>&1\') >&"${FD}"\n'> <'\n'> <'LIM=$(( ${LIM} / 2 ))\n'> <'ulimit -S -n "${LIM}"\n'> <'done\n'> <'\n'> <'# Even though ulimit has been reduced, open fds should work\n'> <'for FD in ${FDs}\n'> <'do\n'> <'echo ${FD} in ${FDs} >&"${FD}" || exit 1\n'> <'done\n'> <'\n'> <'ulimit -S -n "${oLIM}"\n'> <'\n'> <'# maybe more later...\n'> <'\n'> ] ) ) (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<helper.sh>} ) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<helper.sh>} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<validate_fn_redirects>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <validate_fn_redirects_head> name: validate_fn_redirects_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [ {<atf_set>} {(DQ <descr>)} {(DQ <'Tests various redirections applied to functions '>)} {(DQ <'See PR bin/48875'>)} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <validate_fn_redirects_body> name: validate_fn_redirects_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [<'f() {\n'> <'printf \'%s\\n\' In-Func\n'> <'}\n'>] ) ) (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<f-def>}) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'In-Func\\nsuccess1\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(DQ <'. ./f-def; f ; printf \'%s'> <Id.Lit_BadBackslash '\\'> <'n\' success1'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'success2\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} { (DQ <'. ./f-def; f >/dev/null; printf \'%s'> <Id.Lit_BadBackslash '\\'> <'n\' success2'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'success3\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(DQ <'. ./f-def; f >&- ; printf \'%s'> <Id.Lit_BadBackslash '\\'> <'n\' success3'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'In-Func\\nsuccess4\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} { (DQ <'. ./f-def; f & wait; printf \'%s'> <Id.Lit_BadBackslash '\\'> <'n\' success4'>) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'success5\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} { (DQ <'. ./f-def; f >&- & wait; printf \'%s'> <Id.Lit_BadBackslash '\\'> <'n\' success5'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'In-Func\\nIn-Func\\nsuccess6\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(DQ <'. ./f-def; f;f; printf \'%s'> <Id.Lit_BadBackslash '\\'> <'n\' success6'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'In-Func\\nIn-Func\\nsuccess7\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(DQ <'. ./f-def; { f;f;}; printf \'%s'> <Id.Lit_BadBackslash '\\'> <'n\' success7'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'In-Func\\nIn-Func\\nsuccess8\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} { (DQ <'. ./f-def; { f;f;}& wait; printf \'%s'> <Id.Lit_BadBackslash '\\'> <'n\' success8'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'In-Func\\nsuccess9\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} { (DQ <'. ./f-def; { f>/dev/null;f;}& wait; printf \'%s'> <Id.Lit_BadBackslash '\\'> <'n\' success9'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'In-Func\\nsuccess10\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} { (DQ <'. ./f-def; { f;f>/dev/null;}& wait; printf \'%s'> <Id.Lit_BadBackslash '\\'> <'n\' success10'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'Func a\\nFunc b\\nFunc c\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} { (SQ <'\n'> <'\t\t\tf() {\n'> <'\t\t\t\techo Func "$1"\n'> <'\t\t\t}\n'> <'\t\t\texec 3<&0 4>&1\n'> <'\t\t\t( echo x-a; echo y-b; echo z-c ) |\n'> <'\t\t\twhile read A\n'> <'\t\t\tdo\n'> <'\t\t\t\tB=${A#?-}\n'> <'\t\t\t\tf "$B" <&3 >&4\n'> <'\t\t\tdone >&2'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'f() {\n'> <'printf \'%s\' " hello $1"\n'> <'}\n'> <'exec 3>&1\n'> <'echo $( for i in a b c\n'> <'do printf \'%s\' @$i; f $i >&3; done >foo\n'> <')\n'> <'printf \'%s\\n\' foo=$(cat foo)\n'> ] ) ) (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<Script>}) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<empty>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <' hello a hello b hello c\\nfoo=@a@b@c\\n'>)} {(${ Id.VSub_Name TEST_SH)} {<Script>} ] redirects: [] do_fork: T ) (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'. ./f-def || echo >&2 FAIL\n'> <'\t\tf\n'> <'\t\tprintf \'%s'> <Id.Lit_BadBackslash '\\'> <'n\' stdin1\n'> <'\t'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'In-Func\\nstdin1\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (SQ <'\n'> <'\t\t. ./f-def || echo >&2 FAIL\n'> <'\t\tf >&-\n'> <'\t\tprintf "%s\\n" stdin2\n'> <'\t'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'stdin2\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <DONE>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'f() {\n'> <'echo -n f >&3\n'> <'sleep 4\n'> <'echo -n F >&3\n'> <'}\n'> <'g() {\n'> <'echo -n g >&3\n'> <'sleep 2\n'> <'echo -n G >&3\n'> <'}\n'> <'h() {\n'> <'echo -n h >&3\n'> <'}\n'> ] ) ) (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<fgh.def>}) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <fFgGh>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} {(SQ <'. ./fgh.def || echo >&2 FAIL\n'> <'\t\t\texec 3>&1\n'> <'\t\t\tf; g; h'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <fghGF>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} { (SQ <'. ./fgh.def || echo >&2 FAIL\n'> <'\t\t\texec 3>&1\n'> <'\t\t\tf & sleep 1; g & sleep 1; h; wait'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'fFgGhX Y\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} { (SQ <'. ./fgh.def || echo >&2 FAIL\n'> <'\t\t\texec 3>&1\n'> <'\t\t\techo X $( f ; g ; h ) Y'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'fghX Y\\nGF'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} { (SQ <'. ./fgh.def || echo >&2 FAIL\n'> <'\t\t\texec 3>&1\n'> <'\t\t\techo X $( f >&- & sleep 1; g >&- & sleep 1 ; h ) Y\n'> <'\t\t\tsleep 3\n'> <'\t\t\texec 4>&1 || echo FD_FAIL\n'> <'\t\t\t'> ) } ] redirects: [] do_fork: T ) (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (SQ <'\n'> <'\t\t. ./fgh.def || echo >&2 FAIL\n'> <'\t\texec 3>&1\n'> <'\t\techo X $( f >&- & sleep 1; g >&- & sleep 1 ; h ) Y\n'> <'\t\tsleep 3\n'> <'\t\texec 4>&1 || echo FD_FAIL\n'> <'\t'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'fghX Y\\nGF'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <atf_init_test_cases> name: atf_init_test_cases body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<basic_test_method_test>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<do_input_redirections>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<do_output_redirections>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<fd_redirections>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<local_redirections>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<incorrect_redirections>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<named_fd_redirections>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<redir_here_doc>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<redir_in_case>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<subshell_redirections>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<ulimit_redirection_interaction>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<validate_fn_redirects>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) ] )