(CommandList children: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:tid) op:Equal rhs:{(DQ ('config include'))} spids:[7])] spids: [7] ) (C {(umask)} {(022)}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.i)} spids: [23] ) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ('Match host a\n') ('\tHostname aa\n') ('\n') ('Match host b\n') ('\tHostname bb\n') ('\tInclude ') ($ VSub_Name '$OBJ') ('/ssh_config.i.*\n') ('\n') ('Match host c\n') ('\tInclude ') ($ VSub_Name '$OBJ') ('/ssh_config.i.*\n') ('\tHostname cc\n') ('\n') ('Match host m\n') ('\tInclude ') ($ VSub_Name '$OBJ') ('/ssh_config.i.*\n') ('\n') ('Host d\n') ('\tHostname dd\n') ('\n') ('Host e\n') ('\tHostname ee\n') ('\tInclude ') ($ VSub_Name '$OBJ') ('/ssh_config.i.*\n') ('\n') ('Host f\n') ('\tInclude ') ($ VSub_Name '$OBJ') ('/ssh_config.i.*\n') ('\tHostname ff\n') ('\n') ('Host n\n') ('\tInclude ') ($ VSub_Name '$OBJ') ('/ssh_config.i.*\n') ) } do_expansion: True here_end: _EOF was_filled: True spids: [28] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.i.0)} spids: [75] ) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ('Match host xxxxxx\n'))} do_expansion: True here_end: _EOF was_filled: True spids: [80] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.i.1)} spids: [89] ) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ('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_expansion: True here_end: _EOF was_filled: True spids: [94] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.i.2)} spids: [119] ) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ('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_expansion: True here_end: _EOF was_filled: True spids: [124] ) ] ) (FuncDef name: trial body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_host) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [157] ) ] spids: [157] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_exp) op: Equal rhs: {(DQ ($ VSub_Number '$2'))} spids: [163] ) ] spids: [163] ) (AndOr children: [ (SimpleCommand words: [ {(${ VSub_Name REAL_SSH)} {(-F)} {($ VSub_Name '$OBJ') (/ssh_config.i)} {(-G)} {(DQ ($ VSub_Name '$_host'))} ] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.out)} spids: [184] ) ] ) (C {(fatal)} {(DQ ('ssh config parse failed'))}) ] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_got) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(grep)} {(-i)} {(SQ <'^hostname '>)} {($ VSub_Name '$OBJ') (/ssh_config.out)} ) (C {(awk)} {(SQ <'{print $2}'>)}) ] negated: False ) ] ) left_token: <Left_Backtick '`'> spids: [200 219] ) } spids: [199] ) ] spids: [199] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} {(DQ (x) ($ VSub_Name '$_exp'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ (x) ($ VSub_Name '$_got'))} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(fail)} { (DQ ('host ') ($ VSub_Name '$_host') (' include fail: expected ') ($ VSub_Name '$_exp') (' got ') ($ VSub_Name '$_got') ) } ) ] spids: [-1 241] ) ] spids: [-1 256] ) ] spids: [154] ) spids: [150 153] ) (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)}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.i.3)} spids: [322] ) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ('Hostname xxxx\n') ('\tJunk\n'))} do_expansion: True here_end: _EOF was_filled: True spids: [327] ) ] ) (AndOr children: [ (SimpleCommand words: [{(${ VSub_Name REAL_SSH)} {(-F)} {($ VSub_Name '$OBJ') (/ssh_config.i)} {(-G)} {(a)}] redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[348])] ) (C {(fail)} {(DQ ('ssh include allowed invalid config'))}) ] op_id: Op_DAmp ) (AndOr children: [ (SimpleCommand words: [{(${ VSub_Name REAL_SSH)} {(-F)} {($ VSub_Name '$OBJ') (/ssh_config.i)} {(-G)} {(x)}] redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[375])] ) (C {(fail)} {(DQ ('ssh include allowed invalid config'))}) ] op_id: Op_DAmp ) (C {(rm)} {(-f)} {($ VSub_Name '$OBJ') (/ssh_config.i.) (Lit_Other '*')}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.i)} spids: [403] ) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ('Include ') ($ VSub_Name '$OBJ') ('/ssh_config.i.*\n') ('Hostname aa\n'))} do_expansion: True here_end: _EOF was_filled: True spids: [408] ) ] ) (C {(trial)} {(a)} {(aa)}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.i.x)} spids: [430] ) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ('Match host x\n'))} do_expansion: True here_end: _EOF was_filled: True spids: [435] ) ] ) (C {(trial)} {(a)} {(aa)}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.i.x)} spids: [451] ) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ('Host x\n'))} do_expansion: True here_end: _EOF was_filled: True spids: [456] ) ] ) (C {(trial)} {(a)} {(aa)}) (C {(rm)} {(-f)} {($ VSub_Name '$OBJ') (/ssh_config.i)} {($ VSub_Name '$OBJ') (/ssh_config.i.) (Lit_Other '*')} {($ VSub_Name '$OBJ') (/ssh_config.out)} ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:tid) op:Equal rhs:{(DQ ('config include'))} spids:[494])] spids: [494] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.i)} spids: [502] ) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ('Match host a\n') ('\tHostname aa\n') ('\n') ('Match host b\n') ('\tHostname bb\n') ('\tInclude ') ($ VSub_Name '$OBJ') ('/ssh_config.i.*\n') ('\n') ('Match host c\n') ('\tInclude ') ($ VSub_Name '$OBJ') ('/ssh_config.i.*\n') ('\tHostname cc\n') ('\n') ('Match host m\n') ('\tInclude ') ($ VSub_Name '$OBJ') ('/ssh_config.i.*\n') ('\n') ('Host d\n') ('\tHostname dd\n') ('\n') ('Host e\n') ('\tHostname ee\n') ('\tInclude ') ($ VSub_Name '$OBJ') ('/ssh_config.i.*\n') ('\n') ('Host f\n') ('\tInclude ') ($ VSub_Name '$OBJ') ('/ssh_config.i.*\n') ('\tHostname ff\n') ('\n') ('Host n\n') ('\tInclude ') ($ VSub_Name '$OBJ') ('/ssh_config.i.*\n') ) } do_expansion: True here_end: _EOF was_filled: True spids: [507] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.i.0)} spids: [554] ) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ('Match host xxxxxx\n'))} do_expansion: True here_end: _EOF was_filled: True spids: [559] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.i.1)} spids: [568] ) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ('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_expansion: True here_end: _EOF was_filled: True spids: [573] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.i.2)} spids: [598] ) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ('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_expansion: True here_end: _EOF was_filled: True spids: [603] ) ] ) (FuncDef name: trial body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_host) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [636] ) ] spids: [636] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_exp) op: Equal rhs: {(DQ ($ VSub_Number '$2'))} spids: [642] ) ] spids: [642] ) (AndOr children: [ (SimpleCommand words: [ {(${ VSub_Name REAL_SSH)} {(-F)} {($ VSub_Name '$OBJ') (/ssh_config.i)} {(-G)} {(DQ ($ VSub_Name '$_host'))} ] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.out)} spids: [663] ) ] ) (C {(fatal)} {(DQ ('ssh config parse failed'))}) ] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_got) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(grep)} {(-i)} {(SQ <'^hostname '>)} {($ VSub_Name '$OBJ') (/ssh_config.out)} ) (C {(awk)} {(SQ <'{print $2}'>)}) ] negated: False ) ] ) left_token: <Left_Backtick '`'> spids: [679 698] ) } spids: [678] ) ] spids: [678] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} {(DQ (x) ($ VSub_Name '$_exp'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ (x) ($ VSub_Name '$_got'))} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(fail)} { (DQ ('host ') ($ VSub_Name '$_host') (' include fail: expected ') ($ VSub_Name '$_exp') (' got ') ($ VSub_Name '$_got') ) } ) ] spids: [-1 720] ) ] spids: [-1 735] ) ] spids: [633] ) spids: [629 632] ) (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)}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.i.3)} spids: [801] ) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ('Hostname xxxx\n') ('\tJunk\n'))} do_expansion: True here_end: _EOF was_filled: True spids: [806] ) ] ) (AndOr children: [ (SimpleCommand words: [{(${ VSub_Name REAL_SSH)} {(-F)} {($ VSub_Name '$OBJ') (/ssh_config.i)} {(-G)} {(a)}] redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[827])] ) (C {(fail)} {(DQ ('ssh include allowed invalid config'))}) ] op_id: Op_DAmp ) (AndOr children: [ (SimpleCommand words: [{(${ VSub_Name REAL_SSH)} {(-F)} {($ VSub_Name '$OBJ') (/ssh_config.i)} {(-G)} {(x)}] redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[854])] ) (C {(fail)} {(DQ ('ssh include allowed invalid config'))}) ] op_id: Op_DAmp ) (C {(rm)} {(-f)} {($ VSub_Name '$OBJ') (/ssh_config.i.) (Lit_Other '*')}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.i)} spids: [882] ) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ('Include ') ($ VSub_Name '$OBJ') ('/ssh_config.i.*\n') ('Hostname aa\n'))} do_expansion: True here_end: _EOF was_filled: True spids: [887] ) ] ) (C {(trial)} {(a)} {(aa)}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.i.x)} spids: [909] ) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ('Match host x\n'))} do_expansion: True here_end: _EOF was_filled: True spids: [914] ) ] ) (C {(trial)} {(a)} {(aa)}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.i.x)} spids: [930] ) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ('Host x\n'))} do_expansion: True here_end: _EOF was_filled: True spids: [935] ) ] ) (C {(trial)} {(a)} {(aa)}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name '$OBJ') (/ssh_config.i)} spids: [954] ) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ('Include ') ($ VSub_Name '$OBJ') ('/ssh_config.i\n'))} do_expansion: True here_end: _EOF was_filled: True spids: [959] ) ] ) (AndOr children: [ (SimpleCommand words: [{(${ VSub_Name REAL_SSH)} {(-F)} {($ VSub_Name '$OBJ') (/ssh_config.i)} {(-G)} {(a)}] redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[981])] ) (C {(fail)} {(DQ ('ssh include allowed infinite recursion?'))}) ] op_id: Op_DAmp ) (C {(rm)} {(-f)} {($ VSub_Name '$OBJ') (/ssh_config.i)} {($ VSub_Name '$OBJ') (/ssh_config.i.) (Lit_Other '*')} {($ VSub_Name '$OBJ') (/ssh_config.out)} ) ] )