(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tid) op: assign_op.Equal rhs: {(DQ <'sftp commands'>)} spids: [17] ) ] ) (command.ForEach iter_name: i iter_words: [ { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Subshell child: (command.CommandList children: [ (command.Sentence child: (C {<cd>} {<'/bin'>}) terminator: <Id.Op_Semi _> ) (C {<echo>} {<l> <Id.Lit_Star '*'>}) ] ) ) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-r>} {($ Id.VSub_DollarName '$i')} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GLOBFILES) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$GLOBFILES') <' '> ($ Id.VSub_DollarName '$i')) } spids: [64] ) ] ) ] spids: [50 61] ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:QUOTECOPY) op: assign_op.Equal rhs: {(${ Id.VSub_Name COPY) (DQ <.> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <blah> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) ) } spids: [80] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:QUOTECOPY_ARG) op: assign_op.Equal rhs: {(${ Id.VSub_Name COPY) (SQ <'.\\"blah\\"'>)} spids: [91] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SPACECOPY) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name COPY) <' this has spaces.txt'>)} spids: [102] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SPACECOPY_ARG) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name COPY) <Id.Lit_BadBackslash '\\'> <' this'> <Id.Lit_BadBackslash '\\'> <' has'> <Id.Lit_BadBackslash '\\'> <' spaces.txt'> ) } spids: [110] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GLOBMETACOPY) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name COPY) <' [metachar].txt'>)} spids: [126] ) ] ) (C {<rm>} {<-rf>} {(${ Id.VSub_Name COPY)} {(${ Id.VSub_Name COPY) <.1>} {(${ Id.VSub_Name COPY) <.2>} {(${ Id.VSub_Name COPY) <.dd>} {(${ Id.VSub_Name COPY) <.dd2>} ) (C {<mkdir>} {(${ Id.VSub_Name COPY) <.dd>}) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': lls'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (command.Subshell child: (command.CommandList children: [ (command.Sentence child: (C {<echo>} {(DQ <'lcd '> (${ Id.VSub_Name OBJ))}) terminator: <Id.Op_Semi _> ) (C {<echo>} {(DQ <lls>)}) ] ) ) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [(redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})] do_fork: T ) (command.Simple words: [{<grep>} {<copy.dd>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'lls failed'>)}) ] ) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': lls w/path'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'lls '> (${ Id.VSub_Name OBJ))}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [(redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})] do_fork: T ) (command.Simple words: [{<grep>} {<copy.dd>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'lls w/path failed'>)}) ] ) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': ls'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'ls '> (${ Id.VSub_Name OBJ))}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'ls failed'>)}) ] ) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': shell'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'!echo hi there'>)}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'shell failed'>)}) ] ) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': pwd'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <pwd>)}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'pwd failed'>)}) ] ) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': lpwd'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <lpwd>)}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'lpwd failed'>)}) ] ) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': quit'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <quit>)}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'quit failed'>)}) ] ) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': help'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <help>)}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'help failed'>)}) ] ) (C {<rm>} {<-f>} {(${ Id.VSub_Name COPY)}) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': get'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'get '> ($ Id.VSub_DollarName '$DATA') <' '> ($ Id.VSub_DollarName '$COPY'))} ) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'get failed'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {($ Id.VSub_DollarName '$DATA')} {(${ Id.VSub_Name COPY)}) (C {<fail>} {(DQ <'corrupted copy after get'>)}) ] ) (C {<rm>} {<-f>} {(${ Id.VSub_Name COPY)}) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': get quoted'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} { (DQ <'get '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) ($ Id.VSub_DollarName '$DATA') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' '> ($ Id.VSub_DollarName '$COPY') ) } ) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'get failed'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {($ Id.VSub_DollarName '$DATA')} {(${ Id.VSub_Name COPY)}) (C {<fail>} {(DQ <'corrupted copy after get'>)}) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$os'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <cygwin>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<rm>} {<-f>} {(${ Id.VSub_Name QUOTECOPY)}) (C {<cp>} {($ Id.VSub_DollarName '$DATA')} {(${ Id.VSub_Name QUOTECOPY)}) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': get filename with quotes'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} { (DQ <'get '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) ($ Id.VSub_DollarName '$QUOTECOPY_ARG') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' '> (${ Id.VSub_Name COPY) ) } ) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'get failed'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {(${ Id.VSub_Name COPY)} {(${ Id.VSub_Name QUOTECOPY)}) (C {<fail>} {(DQ <'corrupted copy after get with quotes'>)}) ] ) (C {<rm>} {<-f>} {(${ Id.VSub_Name QUOTECOPY)} {(${ Id.VSub_Name COPY)}) ] spids: [702 720] ) ] ) (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$SPACECOPY'))} {(${ Id.VSub_Name COPY)}) (C {<cp>} {($ Id.VSub_DollarName '$DATA')} {(DQ ($ Id.VSub_DollarName '$SPACECOPY'))}) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': get filename with spaces'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'get '> (${ Id.VSub_Name SPACECOPY_ARG) <' '> (${ Id.VSub_Name COPY))}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'get failed'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {(${ Id.VSub_Name COPY)} {(DQ ($ Id.VSub_DollarName '$SPACECOPY'))}) (C {<fail>} {(DQ <'corrupted copy after get with spaces'>)}) ] ) (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$GLOBMETACOPY'))} {(${ Id.VSub_Name COPY)}) (C {<cp>} {($ Id.VSub_DollarName '$DATA')} {(DQ ($ Id.VSub_DollarName '$GLOBMETACOPY'))}) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': get filename with glob metacharacters'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} { (DQ <'get '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) (${ Id.VSub_Name GLOBMETACOPY) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' '> (${ Id.VSub_Name COPY) ) } ) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'get failed'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {(${ Id.VSub_Name COPY)} {(DQ ($ Id.VSub_DollarName '$GLOBMETACOPY'))}) (C {<fail>} {(DQ <'corrupted copy after get with glob metacharacters'>)}) ] ) (C {<rm>} {<-f>} {(${ Id.VSub_Name COPY) <'.dd/'> <Id.Lit_Star '*'>}) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': get to directory'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'get '> ($ Id.VSub_DollarName '$DATA') <' '> (${ Id.VSub_Name COPY) <.dd>)} ) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'get failed'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {($ Id.VSub_DollarName '$DATA')} {(${ Id.VSub_Name COPY) <'.dd/'> ($ Id.VSub_DollarName '$DATANAME')} ) (C {<fail>} {(DQ <'corrupted copy after get'>)}) ] ) (C {<rm>} {<-f>} {(${ Id.VSub_Name COPY) <'.dd/'> <Id.Lit_Star '*'>}) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': glob get to directory'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'get /bin/l* '> (${ Id.VSub_Name COPY) <.dd>)}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'get failed'>)}) ] ) (command.ForEach iter_name: x iter_words: [{($ Id.VSub_DollarName '$GLOBFILES')}] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {<'/bin/'> ($ Id.VSub_DollarName '$x')} {(${ Id.VSub_Name COPY) <'.dd/'> ($ Id.VSub_DollarName '$x')} ) (C {<fail>} {(DQ <'corrupted copy after get'>)}) ] ) ] ) ) (C {<rm>} {<-f>} {(${ Id.VSub_Name COPY) <'.dd/'> <Id.Lit_Star '*'>}) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': get to local dir'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (command.Subshell child: (command.CommandList children: [ (command.Sentence child: (C {<echo>} {(DQ <'lcd '> (${ Id.VSub_Name COPY) <.dd>)}) terminator: <Id.Op_Semi _> ) (C {<echo>} {(DQ <'get '> ($ Id.VSub_DollarName '$DATA'))}) ] ) ) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'get failed'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {($ Id.VSub_DollarName '$DATA')} {(${ Id.VSub_Name COPY) <'.dd/'> ($ Id.VSub_DollarName '$DATANAME')} ) (C {<fail>} {(DQ <'corrupted copy after get'>)}) ] ) (C {<rm>} {<-f>} {(${ Id.VSub_Name COPY) <'.dd/'> <Id.Lit_Star '*'>}) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': glob get to local dir'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (command.Subshell child: (command.CommandList children: [ (command.Sentence child: (C {<echo>} {(DQ <'lcd '> (${ Id.VSub_Name COPY) <.dd>)}) terminator: <Id.Op_Semi _> ) (C {<echo>} {(DQ <'get /bin/l*'>)}) ] ) ) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'get failed'>)}) ] ) (command.ForEach iter_name: x iter_words: [{($ Id.VSub_DollarName '$GLOBFILES')}] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {<'/bin/'> ($ Id.VSub_DollarName '$x')} {(${ Id.VSub_Name COPY) <'.dd/'> ($ Id.VSub_DollarName '$x')} ) (C {<fail>} {(DQ <'corrupted copy after get'>)}) ] ) ] ) ) (C {<rm>} {<-f>} {(${ Id.VSub_Name COPY)}) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': put'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'put '> ($ Id.VSub_DollarName '$DATA') <' '> ($ Id.VSub_DollarName '$COPY'))} ) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'put failed'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {($ Id.VSub_DollarName '$DATA')} {(${ Id.VSub_Name COPY)}) (C {<fail>} {(DQ <'corrupted copy after put'>)}) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$os'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <cygwin>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<rm>} {<-f>} {(${ Id.VSub_Name QUOTECOPY)}) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': put filename with quotes'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} { (DQ <'put '> ($ Id.VSub_DollarName '$DATA') <' '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) ($ Id.VSub_DollarName '$QUOTECOPY_ARG') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) ) } ) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'put failed'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {($ Id.VSub_DollarName '$DATA')} {(${ Id.VSub_Name QUOTECOPY)}) (C {<fail>} {(DQ <'corrupted copy after put with quotes'>)}) ] ) ] spids: [1414 1432] ) ] ) (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$SPACECOPY'))}) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': put filename with spaces'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'put '> ($ Id.VSub_DollarName '$DATA') <' '> (${ Id.VSub_Name SPACECOPY_ARG))} ) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'put failed'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {($ Id.VSub_DollarName '$DATA')} {(DQ ($ Id.VSub_DollarName '$SPACECOPY'))}) (C {<fail>} {(DQ <'corrupted copy after put with spaces'>)}) ] ) (C {<rm>} {<-f>} {(${ Id.VSub_Name COPY) <'.dd/'> <Id.Lit_Star '*'>}) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': put to directory'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'put '> ($ Id.VSub_DollarName '$DATA') <' '> (${ Id.VSub_Name COPY) <.dd>)} ) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'put failed'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {($ Id.VSub_DollarName '$DATA')} {(${ Id.VSub_Name COPY) <'.dd/'> ($ Id.VSub_DollarName '$DATANAME')} ) (C {<fail>} {(DQ <'corrupted copy after put'>)}) ] ) (C {<rm>} {<-f>} {(${ Id.VSub_Name COPY) <'.dd/'> <Id.Lit_Star '*'>}) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': glob put to directory'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'put /bin/l? '> (${ Id.VSub_Name COPY) <.dd>)}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'put failed'>)}) ] ) (command.ForEach iter_name: x iter_words: [{($ Id.VSub_DollarName '$GLOBFILES')}] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {<'/bin/'> ($ Id.VSub_DollarName '$x')} {(${ Id.VSub_Name COPY) <'.dd/'> ($ Id.VSub_DollarName '$x')} ) (C {<fail>} {(DQ <'corrupted copy after put'>)}) ] ) ] ) ) (C {<rm>} {<-f>} {(${ Id.VSub_Name COPY) <'.dd/'> <Id.Lit_Star '*'>}) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': put to local dir'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (command.Subshell child: (command.CommandList children: [ (command.Sentence child: (C {<echo>} {(DQ <'cd '> (${ Id.VSub_Name COPY) <.dd>)}) terminator: <Id.Op_Semi _> ) (C {<echo>} {(DQ <'put '> ($ Id.VSub_DollarName '$DATA'))}) ] ) ) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'put failed'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {($ Id.VSub_DollarName '$DATA')} {(${ Id.VSub_Name COPY) <'.dd/'> ($ Id.VSub_DollarName '$DATANAME')} ) (C {<fail>} {(DQ <'corrupted copy after put'>)}) ] ) (C {<rm>} {<-f>} {(${ Id.VSub_Name COPY) <'.dd/'> <Id.Lit_Star '*'>}) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': glob put to local dir'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (command.Subshell child: (command.CommandList children: [ (command.Sentence child: (C {<echo>} {(DQ <'cd '> (${ Id.VSub_Name COPY) <.dd>)}) terminator: <Id.Op_Semi _> ) (C {<echo>} {(DQ <'put /bin/l?'>)}) ] ) ) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'put failed'>)}) ] ) (command.ForEach iter_name: x iter_words: [{($ Id.VSub_DollarName '$GLOBFILES')}] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {<'/bin/'> ($ Id.VSub_DollarName '$x')} {(${ Id.VSub_Name COPY) <'.dd/'> ($ Id.VSub_DollarName '$x')} ) (C {<fail>} {(DQ <'corrupted copy after put'>)}) ] ) ] ) ) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': rename'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'rename '> ($ Id.VSub_DollarName '$COPY') <' '> (${ Id.VSub_Name COPY) <.1>)} ) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'rename failed'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<test>} {<-f>} {(${ Id.VSub_Name COPY) <.1>}) (C {<fail>} {(DQ <'missing file after rename'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{<cmp>} {($ Id.VSub_DollarName '$DATA')} {(${ Id.VSub_Name COPY) <.1>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>}) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) (C {<fail>} {(DQ <'corrupted copy after rename'>)}) ] ) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': rename directory'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'rename '> (${ Id.VSub_Name COPY) <'.dd '> (${ Id.VSub_Name COPY) <.dd2>)}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'rename directory failed'>)}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {<-d>} {(${ Id.VSub_Name COPY) <.dd>}) (C {<fail>} {(DQ <'oldname exists after rename directory'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<test>} {<-d>} {(${ Id.VSub_Name COPY) <.dd2>}) (C {<fail>} {(DQ <'missing newname after rename directory'>)}) ] ) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': ln'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'ln '> (${ Id.VSub_Name COPY) <'.1 '> (${ Id.VSub_Name COPY) <.2>)}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'ln failed'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<test>} {<-f>} {(${ Id.VSub_Name COPY) <.2>}) (C {<fail>} {(DQ <'missing file after ln'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {(${ Id.VSub_Name COPY) <.1>} {(${ Id.VSub_Name COPY) <.2>}) (C {<fail>} {(DQ <'created file is not equal after ln'>)}) ] ) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': ln -s'>)}) (C {<rm>} {<-f>} {(${ Id.VSub_Name COPY) <.2>}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'ln -s '> (${ Id.VSub_Name COPY) <'.1 '> (${ Id.VSub_Name COPY) <.2>)}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'ln -s failed'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<test>} {<-h>} {(${ Id.VSub_Name COPY) <.2>}) (C {<fail>} {(DQ <'missing file after ln -s'>)}) ] ) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': mkdir'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'mkdir '> (${ Id.VSub_Name COPY) <.dd>)}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'mkdir failed'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<test>} {<-d>} {(${ Id.VSub_Name COPY) <.dd>}) (C {<fail>} {(DQ <'missing directory after mkdir'>)}) ] ) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': chdir'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'chdir '> (${ Id.VSub_Name COPY) <.dd>)}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'chdir failed'>)}) ] ) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': rmdir'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'rmdir '> (${ Id.VSub_Name COPY) <.dd>)}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'rmdir failed'>)}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {<-d>} {(${ Id.VSub_Name COPY) <.1>}) (C {<fail>} {(DQ <'present directory after rmdir'>)}) ] ) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': lmkdir'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'lmkdir '> (${ Id.VSub_Name COPY) <.dd>)}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'lmkdir failed'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<test>} {<-d>} {(${ Id.VSub_Name COPY) <.dd>}) (C {<fail>} {(DQ <'missing directory after lmkdir'>)}) ] ) (C {<verbose>} {(DQ ($ Id.VSub_DollarName '$tid') <': lchdir'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {<echo>} {(DQ <'lchdir '> (${ Id.VSub_Name COPY) <.dd>)}) (command.Simple words: [{(${ Id.VSub_Name SFTP)} {<-D>} {(${ Id.VSub_Name SFTPSERVER)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] negated: F ) (C {<fail>} {(DQ <'lchdir failed'>)}) ] ) (C {<rm>} {<-rf>} {(${ Id.VSub_Name COPY)} {(${ Id.VSub_Name COPY) <.1>} {(${ Id.VSub_Name COPY) <.2>} {(${ Id.VSub_Name COPY) <.dd>} {(${ Id.VSub_Name COPY) <.dd2>} ) (C {<rm>} {<-rf>} {(${ Id.VSub_Name QUOTECOPY)} {(DQ ($ Id.VSub_DollarName '$SPACECOPY'))} {(DQ ($ Id.VSub_DollarName '$GLOBMETACOPY'))} ) ] )