(CommandList children: [ (FuncDef name: printUsageAndExit body: (BraceGroup children: [ (C {(echo)} {(DQ ("Usage:"))}) (C {(echo)} {(DQ ("./RemoteRunSafely.sh <hostname> [-l <login_name>] [-p <port>] "))} {(DQ ("<program> <args...>"))} ) (C {(exit)} {(255)}) ] spids: [65] ) spids: [61 64] ) (FuncDef name: moreArgsExpected body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (C {(Lit_Other "[")} {($ VSub_Number "$1")} {(-lt)} {($ VSub_Number "$2")} {(Lit_Other "]")} ) ] action: [ (C {(echo)} {(DQ ("Error: Wrong number of argumants."))}) (C {(printUsageAndExit)}) ] spids: [-1 123] ) ] spids: [-1 136] ) ] spids: [99] ) spids: [95 98] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ORIG_ARGS) op: Equal rhs: {(DQ ($ VSub_Star "$*"))} spids: [147] ) ] spids: [147] ) (C {(moreArgsExpected)} {($ VSub_Pound "$#")} {(1)}) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:RHOST) op:Equal rhs:{($ VSub_Number "$1")} spids:[162])] spids: [162] ) (C {(shift)} {(1)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RUSER) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(id)} {(-un)})]) left_token: <Left_Backtick "`"> spids: [171 175] ) } spids: [170] ) ] spids: [170] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:RCLIENT) op:Equal rhs:{(ssh)} spids:[177])] spids: [177] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:RPORT) op:Equal rhs:{(SQ )} spids:[180])] spids: [180] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:WORKING_DIR) op:Equal rhs:{(SQ )} spids:[182])] spids: [182] ) (C {(moreArgsExpected)} {($ VSub_Pound "$#")} {(1)}) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {($ VSub_Number "$1")} {(Lit_Other "=")} {(DQ (-l))} {(Lit_Other "]")} ) terminator: <Op_Semi ";"> ) ] action: [ (C {(moreArgsExpected)} {($ VSub_Pound "$#")} {(2)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RUSER) op: Equal rhs: {($ VSub_Number "$2")} spids: [216] ) ] spids: [216] ) (C {(shift)} {(2)}) ] spids: [-1 206] ) ] spids: [-1 224] ) (C {(moreArgsExpected)} {($ VSub_Pound "$#")} {(1)}) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {($ VSub_Number "$1")} {(Lit_Other "=")} {(DQ (-p))} {(Lit_Other "]")} ) terminator: <Op_Semi ";"> ) ] action: [ (C {(moreArgsExpected)} {($ VSub_Pound "$#")} {(2)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RPORT) op: Equal rhs: {(DQ ("-p ") ($ VSub_Number "$2"))} spids: [257] ) ] spids: [257] ) (C {(shift)} {(2)}) ] spids: [-1 247] ) ] spids: [-1 268] ) (C {(moreArgsExpected)} {($ VSub_Pound "$#")} {(1)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:PROGRAM) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(basename)} {($ VSub_Number "$1")})]) left_token: <Left_CommandSub "$("> spids: [278 282] ) } spids: [277] ) ] spids: [277] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:WORKING_DIR) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(dirname)} {($ VSub_Number "$1")})]) left_token: <Left_CommandSub "$("> spids: [285 289] ) } spids: [284] ) ] spids: [284] ) (C {(shift)} {(1)}) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$RHOST"))} {(Lit_Other "=")} {(DQ )} {(-o)} {(DQ ($ VSub_Name "$PROGRAM"))} {(Lit_Other "=")} {(DQ )} {(Lit_Other "]")} ) terminator: <Op_Semi ";"> ) ] action: [(C {(printUsageAndExit)})] spids: [-1 345] ) ] spids: [-1 350] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:local_program) op: Equal rhs: {($ VSub_Name "$WORKING_DIR") (DQ (/)) ($ VSub_Name "$PROGRAM")} spids: [356] ) ] spids: [356] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(KW_Bang "!")} {(-x)} {(DQ ($ VSub_Name "$local_program"))} {(Lit_Other "]")} ) terminator: <Op_Semi ";"> ) ] action: [ (C {(echo)} {(DQ ("File ")) ($ VSub_Name "$local_program") (DQ (" does not exist or is not an executable..")) } ) (C {(exit)} {(255)}) ] spids: [-1 378] ) ] spids: [-1 396] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:connection) op: Equal rhs: {($ VSub_Name "$RUSER") (SQ <"@">) ($ VSub_Name "$RHOST")} spids: [399] ) ] spids: [399] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:remote) op: Equal rhs: {(DQ (./)) ($ VSub_Name "$PROGRAM")} spids: [406] ) ] spids: [406] ) (Subshell child: (Pipeline children: [ (C {(cat)} {($ VSub_Name "$local_program")}) (C {($ VSub_Name "$RCLIENT")} {($ VSub_Name "$connection")} {($ VSub_Name "$RPORT")} {(SQ <"rm -f ">) ($ VSub_Name "$remote") (SQ <" ; ">)} {(SQ <"cat > ">) ($ VSub_Name "$remote") (SQ <" ; chmod +x ">) ($ VSub_Name "$remote") (SQ <" ; ">) ($ VSub_Name "$remote") (SQ <" ">) ($ VSub_Star "$*") (SQ <" ; ">) } {(SQ <"err=$? ; rm -f ">) ($ VSub_Name "$remote") (SQ <" ; exit $err">)} ) ] negated: False ) spids: [412 471] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:err) op:Equal rhs:{($ VSub_QMark "$?")} spids:[473])] spids: [473] ) (C {(exit)} {($ VSub_Name "$err")}) ] )