(CommandList children: [ (FuncDef name: usage body: (BraceGroup children: [ (SimpleCommand words: [ {(echo)} { (DQ ('usage: ssh-copy-id [-lv] [-i keyfile] [-o option] [-p port] [user@]hostname')) } ] redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [89] ) spids: [85 88] ) (FuncDef name: sendkey body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:h) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [118] ) ] spids: [116] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:k) op: Equal rhs: {(DQ ($ VSub_Number '$2'))} spids: [126] ) ] spids: [124] ) (Pipeline children: [ (C {(printf)} {(DQ ('%s') (Lit_Other '\\') (n))} {(DQ ($ VSub_Name '$k'))}) (C {(ssh)} {($ VSub_Name '$port')} {(-S)} {(none)} {($ VSub_Name '$options')} {(DQ ($ VSub_Name '$user') ($ VSub_Name '$h'))} {(/bin/sh)} {(-c)} {(EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <' \\\n'> <'\t\tset -e; \\\n'> <'\t\tumask 077; \\\n'> <'\t\tkeyfile=$HOME/.ssh/authorized_keys ; \\\n'> <'\t\tmkdir -p -- "$HOME/.ssh/" ; \\\n'> <'\t\twhile read alg key comment ; do \\\n'> <'\t\t\t[ -n "$key" ] || continue; \\\n'> <'\t\t\tif ! grep -sqwF "$key" "$keyfile"; then \\\n'> <'\t\t\t\tprintf "$alg $key $comment\\n" >> "$keyfile" ; \\\n'> <'\t\t\tfi ; \\\n'> <'\t\tdone ; \\\n'> <'\t\tif [ -x /sbin/restorecon ]; then \\\n'> < '\t\t\t/sbin/restorecon -F "$HOME/.ssh/" "$keyfile" >/dev/null 2>&1 || true ; \\\n' > <'\t\tfi \\\n'> <'\t'> ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) } ) ] negated: F ) ] spids: [113] ) spids: [109 112] ) (FuncDef name: agentKeys body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:keys) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(ssh-add)} {(-L)}) (C {(grep)} {(-v)} {(SQ <'The agent has no identities.'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [198 212] ) ($ VSub_Name '$nl') ($ VSub_Name '$keys') ) } spids: [196] ) ] spids: [196] ) ] spids: [193] ) spids: [189 192] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:keys) op:Equal rhs:{(DQ )} spids:[220])] spids: [220] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:host) op:Equal rhs:{(DQ )} spids:[224])] spids: [224] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:hasarg) op:Equal rhs:{(DQ )} spids:[228])] spids: [228] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:user) op:Equal rhs:{(DQ )} spids:[232])] spids: [232] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:port) op:Equal rhs:{(DQ )} spids:[236])] spids: [236] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:nl) op:Equal rhs:{(DQ ('\n'))} spids:[240])] spids: [240] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:options) op:Equal rhs:{(DQ )} spids:[245])] spids: [245] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:IFS) op:Equal rhs:{($ VSub_Name '$nl')} spids:[250])] spids: [250] ) (WhileUntil keyword: <KW_While while> cond: [(Sentence child:(C {(getopts)} {(SQ <'i:lo:p:v'>)} {(arg)}) terminator:<Op_Semi ';'>)] body: (DoGroup children: [ (Case to_match: {($ VSub_Name '$arg')} arms: [ (case_arm pat_list: [{(i)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:hasarg) op: Equal rhs: {(DQ (x))} spids: [280] ) ] spids: [280] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-r)} {(DQ (${ VSub_Name OPTARG) (.pub))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:keys) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(cat)} {(--)} {(DQ (${ VSub_Name OPTARG) (.pub))}) ] ) left_token: <Left_CommandSub '$('> spids: [307 318] ) ($ VSub_Name '$nl') ($ VSub_Name '$keys') ) } spids: [305] ) ] spids: [305] ) ] spids: [16777215 302] ) (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-r)} {(DQ ($ VSub_Name '$OPTARG'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:keys) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(cat)} {(--)} {(DQ ($ VSub_Name '$OPTARG'))}) ] ) left_token: <Left_CommandSub '$('> spids: [342 350] ) ($ VSub_Name '$nl') ($ VSub_Name '$keys') ) } spids: [340] ) ] spids: [340] ) ] spids: [324 337] ) ] else_action: [ (SimpleCommand words: [{(echo)} {(DQ ('File ') ($ VSub_Name '$OPTARG') (' not found'))}] redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) (ControlFlow token: <ControlFlow_Exit exit> arg_word: {(1)} ) ] spids: [356 376] ) ] spids: [275 276 379 16777215] ) (case_arm pat_list: [{(l)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:hasarg) op: Equal rhs: {(DQ (x))} spids: [387] ) ] spids: [387] ) (C {(agentKeys)}) ] spids: [382 383 396 16777215] ) (case_arm pat_list: [{(p)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:port) op: Equal rhs: {(-p) ($ VSub_Name '$nl') ($ VSub_Name '$OPTARG')} spids: [404] ) ] spids: [404] ) ] spids: [399 400 410 16777215] ) (case_arm pat_list: [{(o)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:options) op: Equal rhs: {($ VSub_Name '$options') ($ VSub_Name '$nl') (-o) ($ VSub_Name '$nl') ($ VSub_Name '$OPTARG') } spids: [418] ) ] spids: [418] ) ] spids: [413 414 426 16777215] ) (case_arm pat_list: [{(v)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:options) op: Equal rhs: {(DQ ($ VSub_Name '$options') ($ VSub_Name '$nl') (-v))} spids: [433] ) ] spids: [433] ) ] spids: [429 430 441 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [(C {(usage)})] spids: [444 445 452 16777215] ) ] spids: [268 272 455] ) ] spids: [265 457] ) redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) (C {(shift)} { (ArithSubPart anode: (ArithBinary op_id: Arith_Minus left: (ArithVarRef name:OPTIND) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [465 470] ) } ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$hasarg'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [(C {(agentKeys)})] spids: [16777215 486] ) ] spids: [16777215 491] ) (If arms: [ (if_arm cond: [ (Sentence child: (AndOr ops: [Op_DPipe] children: [ (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$keys'))} {(Lit_Other ']')}) (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$keys'))} {(Lit_Other '=')} {(DQ ($ VSub_Name '$nl'))} {(Lit_Other ']')} ) ] ) terminator: <Op_Semi ';'> ) ] action: [ (SimpleCommand words: [{(echo)} {(DQ ('no keys found'))}] redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 522] ) ] spids: [16777215 539] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Pound '$#'))} {(-eq)} {(0)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [(C {(usage)})] spids: [16777215 556] ) ] spids: [16777215 561] ) (ForEach iter_name: host iter_words: [{(DQ ($ VSub_At '$@'))}] do_arg_iter: F body: (DoGroup children: [(C {(sendkey)} {(DQ ($ VSub_Name '$host'))} {(DQ ($ VSub_Name '$keys'))})] spids: [575 588] ) spids: [569 573] ) ] )