(List (FunctionDef printUsageAndExit [] (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Usage:"]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "./RemoteRunSafely.sh [-l ] [-p ] "]]} {[DQ [LIT_CHARS " "]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 255]}) ) ) (FunctionDef moreArgsExpected [] (If (Com {[LIT_OTHER "["]} {[VarSub 1]} {[LIT_CHARS -lt]} {[VarSub 2]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Error: Wrong number of argumants."]]}) (Com {[LIT_CHARS printUsageAndExit]}) ) ) ) (= scope= flags=0 words=[] bindings=[('ORIG_ARGS', {[DQ [VarSub *]]})]) (Com {[LIT_CHARS moreArgsExpected]} {[VarSub #]} {[LIT_CHARS 1]}) (= scope= flags=0 words=[] bindings=[('RHOST', {[VarSub 1]})]) (Com {[LIT_CHARS shift]} {[LIT_CHARS 1]}) (= scope= flags=0 words=[] bindings=[('RUSER', {[ComSub (Com {[LIT_CHARS id]} {[LIT_CHARS -un]})]})]) (= scope= flags=0 words=[] bindings=[('RCLIENT', {[LIT_CHARS ssh]})]) (= scope= flags=0 words=[] bindings=[('RPORT', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('WORKING_DIR', {[SQ ]})]) (Com {[LIT_CHARS moreArgsExpected]} {[VarSub #]} {[LIT_CHARS 1]}) (If (Com {[LIT_OTHER "["]} {[VarSub 1]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS -l]]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS moreArgsExpected]} {[VarSub #]} {[LIT_CHARS 2]}) (= scope= flags=0 words=[] bindings=[('RUSER', {[VarSub 2]})]) (Com {[LIT_CHARS shift]} {[LIT_CHARS 2]}) ) ) (Com {[LIT_CHARS moreArgsExpected]} {[VarSub #]} {[LIT_CHARS 1]}) (If (Com {[LIT_OTHER "["]} {[VarSub 1]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS -p]]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS moreArgsExpected]} {[VarSub #]} {[LIT_CHARS 2]}) (= scope= flags=0 words=[] bindings=[('RPORT', {[DQ [LIT_CHARS "-p "][VarSub 2]]})]) (Com {[LIT_CHARS shift]} {[LIT_CHARS 2]}) ) ) (Com {[LIT_CHARS moreArgsExpected]} {[VarSub #]} {[LIT_CHARS 1]}) (= scope= flags=0 words=[] bindings=[('PROGRAM', {[ComSub (Com {[LIT_CHARS basename]} {[VarSub 1]})]})]) (= scope= flags=0 words=[] bindings=[('WORKING_DIR', {[ComSub (Com {[LIT_CHARS dirname]} {[VarSub 1]})]})]) (Com {[LIT_CHARS shift]} {[LIT_CHARS 1]}) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub RHOST]]} {[LIT_OTHER "="]} {[DQ ]} {[LIT_CHARS -o]} {[DQ [VarSub PROGRAM]]} {[LIT_OTHER "="]} {[DQ ]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS printUsageAndExit]}) ) (= scope= flags=0 words=[] bindings=[('local_program', {[VarSub WORKING_DIR] [DQ [LIT_CHARS /]] [VarSub PROGRAM]})]) (If (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -x]} {[DQ [VarSub local_program]]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "File "]] [VarSub local_program] [DQ [LIT_CHARS " does not exist or is not an executable.."]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 255]}) ) ) (= scope= flags=0 words=[] bindings=[('connection', {[VarSub RUSER] [SQ ] [VarSub RHOST]})]) (= scope= flags=0 words=[] bindings=[('remote', {[DQ [LIT_CHARS ./]] [VarSub PROGRAM]})]) (Subshell (Pipeline (Com {[LIT_CHARS cat]} {[VarSub local_program]}) (Com {[VarSub RCLIENT]} {[VarSub connection]} {[VarSub RPORT]} {[SQ ] [VarSub remote] [SQ ]} {[SQ ">] [VarSub remote] [SQ ] [VarSub remote] [SQ ] [VarSub remote] [SQ ] [VarSub *] [SQ ]} {[SQ ] [VarSub remote] [SQ ]}) ) ) (= scope= flags=0 words=[] bindings=[('err', {[VarSub ?]})]) (Com {[LIT_CHARS exit]} {[VarSub err]}) )