(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tid) op: assign_op.Equal rhs: {(DQ <'expand %h and %n'>)} spids: [7] ) ] ) (command.Simple words: [{<echo>} {(SQ <'PermitLocalCommand yes'>)}] redirects: [ (redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_proxy'>} ) ] do_fork: T ) (command.Simple words: [{<printf>} {(SQ <'LocalCommand printf "%%%%s\\\\n" "%%n" "%%h"\\n'>)}] redirects: [ (redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_proxy'>} ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/expect'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOE>} here_end_span_id: 48 stdin_parts: [<'somehost\n'> <'127.0.0.1\n'>] ) ) ] do_fork: T ) (command.ForEach iter_name: p iter_words: [{(${ Id.VSub_Name SSH_PROTOCOLS)}] do_arg_iter: F body: (command.DoGroup children: [ (C {<verbose>} {(DQ <'test '> ($ Id.VSub_DollarName '$tid') <': proto '> ($ Id.VSub_DollarName '$p'))} ) (command.Simple words: [ {(${ Id.VSub_Name SSH)} {<-F>} {($ Id.VSub_DollarName '$OBJ') <'/ssh_proxy'>} {<-> ($ Id.VSub_DollarName '$p')} {<somehost>} {<true>} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/actual'>} ) ] do_fork: T ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<diff>} {($ Id.VSub_DollarName '$OBJ') <'/expect'>} {($ Id.VSub_DollarName '$OBJ') <'/actual'>} ) (C {<fail>} {(DQ ($ Id.VSub_DollarName '$tid') <' proto '> ($ Id.VSub_DollarName '$p'))}) ] ) ] ) ) ] )