(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tid) op: assign_op.Equal rhs: {(DQ <'config include'>)} spids: [7] ) ] ) (C {<umask>} {<022>}) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<_EOF>} here_end_span_id: 72 stdin_parts: [ <'Match host a\n'> <'\tHostname aa\n'> <'\n'> <'Match host b\n'> <'\tHostname bb\n'> <'\tInclude '> ($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.*\n'> <'\n'> <'Match host c\n'> <'\tInclude '> ($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.*\n'> <'\tHostname cc\n'> <'\n'> <'Match host m\n'> <'\tInclude '> ($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.*\n'> <'\n'> <'Host d\n'> <'\tHostname dd\n'> <'\n'> <'Host e\n'> <'\tHostname ee\n'> <'\tInclude '> ($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.*\n'> <'\n'> <'Host f\n'> <'\tInclude '> ($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.*\n'> <'\tHostname ff\n'> <'\n'> <'Host n\n'> <'\tInclude '> ($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.*\n'> ] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.0'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<_EOF>} here_end_span_id: 87 stdin_parts: [<'Match host xxxxxx\n'>] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.1'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<_EOF>} here_end_span_id: 118 stdin_parts: [ <'Match host a\n'> <'\tHostname aaa\n'> <'\n'> <'Match host b\n'> <'\tHostname bbb\n'> <'\n'> <'Match host c\n'> <'\tHostname ccc\n'> <'\n'> <'Host d\n'> <'\tHostname ddd\n'> <'\n'> <'Host e\n'> <'\tHostname eee\n'> <'\n'> <'Host f\n'> <'\tHostname fff\n'> ] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.2'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<_EOF>} here_end_span_id: 152 stdin_parts: [ <'Match host a\n'> <'\tHostname aaaa\n'> <'\n'> <'Match host b\n'> <'\tHostname bbbb\n'> <'\n'> <'Match host c\n'> <'\tHostname cccc\n'> <'\n'> <'Host d\n'> <'\tHostname dddd\n'> <'\n'> <'Host e\n'> <'\tHostname eeee\n'> <'\n'> <'Host f\n'> <'\tHostname ffff\n'> <'\n'> <'Match all\n'> <'\tHostname xxxx\n'> ] ) ) ] do_fork: T ) (command.ShFunction name: trial body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_host) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [161] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_exp) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [167] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [ {(${ Id.VSub_Name REAL_SSH)} {<-F>} {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i'>} {<-G>} {(DQ ($ Id.VSub_DollarName '$_host'))} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.out'>} ) ] do_fork: T ) (C {<fatal>} {(DQ <'ssh config parse failed'>)}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_got) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<grep>} {<-i>} {(SQ <'^hostname '>)} {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.out'>} ) (C {<awk>} {(SQ <'{print $2}'>)}) ] negated: F ) ) } spids: [203] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<test>} {(DQ <x> ($ Id.VSub_DollarName '$_exp'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <x> ($ Id.VSub_DollarName '$_got'))} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<fail>} { (DQ <'host '> ($ Id.VSub_DollarName '$_host') <' include fail: expected '> ($ Id.VSub_DollarName '$_exp') <' got '> ($ Id.VSub_DollarName '$_got') ) } ) ] spids: [228 247] ) ] ) ] ) ) (C {<trial>} {<a>} {<aa>}) (C {<trial>} {<b>} {<bb>}) (C {<trial>} {<c>} {<ccc>}) (C {<trial>} {<d>} {<dd>}) (C {<trial>} {<e>} {<ee>}) (C {<trial>} {<f>} {<fff>}) (C {<trial>} {<m>} {<xxxx>}) (C {<trial>} {<n>} {<xxxx>}) (C {<trial>} {<x>} {<x>}) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.3'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<_EOF>} here_end_span_id: 340 stdin_parts: [<'Hostname xxxx\n'> <'\tJunk\n'>] ) ) ] do_fork: T ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [ {(${ Id.VSub_Name REAL_SSH)} {<-F>} {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i'>} {<-G>} {<a>} ] redirects: [(redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})] do_fork: T ) (C {<fail>} {(DQ <'ssh include allowed invalid config'>)}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [ {(${ Id.VSub_Name REAL_SSH)} {<-F>} {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i'>} {<-G>} {<x>} ] redirects: [(redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})] do_fork: T ) (C {<fail>} {(DQ <'ssh include allowed invalid config'>)}) ] ) (C {<rm>} {<-f>} {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.'> <Id.Lit_Star '*'>}) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<_EOF>} here_end_span_id: 424 stdin_parts: [ <'Include '> ($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.*\n'> <'Hostname aa\n'> ] ) ) ] do_fork: T ) (C {<trial>} {<a>} {<aa>}) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.x'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<_EOF>} here_end_span_id: 449 stdin_parts: [<'Match host x\n'>] ) ) ] do_fork: T ) (C {<trial>} {<a>} {<aa>}) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.x'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<_EOF>} here_end_span_id: 471 stdin_parts: [<'Host x\n'>] ) ) ] do_fork: T ) (C {<trial>} {<a>} {<aa>}) (C {<rm>} {<-f>} {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i'>} {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.'> <Id.Lit_Star '*'>} {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.out'>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tid) op: assign_op.Equal rhs: {(DQ <'config include'>)} spids: [504] ) ] ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<_EOF>} here_end_span_id: 561 stdin_parts: [ <'Match host a\n'> <'\tHostname aa\n'> <'\n'> <'Match host b\n'> <'\tHostname bb\n'> <'\tInclude '> ($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.*\n'> <'\n'> <'Match host c\n'> <'\tInclude '> ($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.*\n'> <'\tHostname cc\n'> <'\n'> <'Match host m\n'> <'\tInclude '> ($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.*\n'> <'\n'> <'Host d\n'> <'\tHostname dd\n'> <'\n'> <'Host e\n'> <'\tHostname ee\n'> <'\tInclude '> ($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.*\n'> <'\n'> <'Host f\n'> <'\tInclude '> ($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.*\n'> <'\tHostname ff\n'> <'\n'> <'Host n\n'> <'\tInclude '> ($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.*\n'> ] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.0'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<_EOF>} here_end_span_id: 576 stdin_parts: [<'Match host xxxxxx\n'>] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.1'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<_EOF>} here_end_span_id: 607 stdin_parts: [ <'Match host a\n'> <'\tHostname aaa\n'> <'\n'> <'Match host b\n'> <'\tHostname bbb\n'> <'\n'> <'Match host c\n'> <'\tHostname ccc\n'> <'\n'> <'Host d\n'> <'\tHostname ddd\n'> <'\n'> <'Host e\n'> <'\tHostname eee\n'> <'\n'> <'Host f\n'> <'\tHostname fff\n'> ] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.2'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<_EOF>} here_end_span_id: 641 stdin_parts: [ <'Match host a\n'> <'\tHostname aaaa\n'> <'\n'> <'Match host b\n'> <'\tHostname bbbb\n'> <'\n'> <'Match host c\n'> <'\tHostname cccc\n'> <'\n'> <'Host d\n'> <'\tHostname dddd\n'> <'\n'> <'Host e\n'> <'\tHostname eeee\n'> <'\n'> <'Host f\n'> <'\tHostname ffff\n'> <'\n'> <'Match all\n'> <'\tHostname xxxx\n'> ] ) ) ] do_fork: T ) (command.ShFunction name: trial body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_host) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [650] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_exp) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [656] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [ {(${ Id.VSub_Name REAL_SSH)} {<-F>} {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i'>} {<-G>} {(DQ ($ Id.VSub_DollarName '$_host'))} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.out'>} ) ] do_fork: T ) (C {<fatal>} {(DQ <'ssh config parse failed'>)}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_got) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<grep>} {<-i>} {(SQ <'^hostname '>)} {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.out'>} ) (C {<awk>} {(SQ <'{print $2}'>)}) ] negated: F ) ) } spids: [692] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<test>} {(DQ <x> ($ Id.VSub_DollarName '$_exp'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <x> ($ Id.VSub_DollarName '$_got'))} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<fail>} { (DQ <'host '> ($ Id.VSub_DollarName '$_host') <' include fail: expected '> ($ Id.VSub_DollarName '$_exp') <' got '> ($ Id.VSub_DollarName '$_got') ) } ) ] spids: [717 736] ) ] ) ] ) ) (C {<trial>} {<a>} {<aa>}) (C {<trial>} {<b>} {<bb>}) (C {<trial>} {<c>} {<ccc>}) (C {<trial>} {<d>} {<dd>}) (C {<trial>} {<e>} {<ee>}) (C {<trial>} {<f>} {<fff>}) (C {<trial>} {<m>} {<xxxx>}) (C {<trial>} {<n>} {<xxxx>}) (C {<trial>} {<x>} {<x>}) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.3'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<_EOF>} here_end_span_id: 829 stdin_parts: [<'Hostname xxxx\n'> <'\tJunk\n'>] ) ) ] do_fork: T ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [ {(${ Id.VSub_Name REAL_SSH)} {<-F>} {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i'>} {<-G>} {<a>} ] redirects: [(redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})] do_fork: T ) (C {<fail>} {(DQ <'ssh include allowed invalid config'>)}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [ {(${ Id.VSub_Name REAL_SSH)} {<-F>} {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i'>} {<-G>} {<x>} ] redirects: [(redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})] do_fork: T ) (C {<fail>} {(DQ <'ssh include allowed invalid config'>)}) ] ) (C {<rm>} {<-f>} {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.'> <Id.Lit_Star '*'>}) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<_EOF>} here_end_span_id: 913 stdin_parts: [ <'Include '> ($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.*\n'> <'Hostname aa\n'> ] ) ) ] do_fork: T ) (C {<trial>} {<a>} {<aa>}) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.x'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<_EOF>} here_end_span_id: 938 stdin_parts: [<'Match host x\n'>] ) ) ] do_fork: T ) (C {<trial>} {<a>} {<aa>}) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.x'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<_EOF>} here_end_span_id: 960 stdin_parts: [<'Host x\n'>] ) ) ] do_fork: T ) (C {<trial>} {<a>} {<aa>}) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<_EOF>} here_end_span_id: 987 stdin_parts: [<'Include '> ($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i\n'>] ) ) ] do_fork: T ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [ {(${ Id.VSub_Name REAL_SSH)} {<-F>} {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i'>} {<-G>} {<a>} ] redirects: [(redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})] do_fork: T ) (C {<fail>} {(DQ <'ssh include allowed infinite recursion?'>)}) ] ) (C {<rm>} {<-f>} {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i'>} {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.i.'> <Id.Lit_Star '*'>} {($ Id.VSub_DollarName '$OBJ') <'/ssh_config.out'>} ) ] )