(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<no>} spids: [89] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:WORKDIR) op: assign_op.Equal rhs: {<work>} spids: [92] ) ] ) (command.ShFunction name: usage body: (BraceGroup children: [ (C {<echo>} {(DQ <'Usage: tzsetup.sh [-s script] [-w workdir]'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMMAND) op: assign_op.Equal rhs: {<etcupdate>} spids: [120] ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (C {<getopts>} {(DQ <'s:w:'>)} {<option>}) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup children: [ (command.Case to_match: {($ Id.VSub_DollarName '$option')} arms: [ (case_arm pat_list: [{<s>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMMAND) op: assign_op.Equal rhs: {(DQ <'sh '> ($ Id.VSub_DollarName '$OPTARG'))} spids: [148] ) ] ) ] spids: [144 145 155 -1] ) (case_arm pat_list: [{<w>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:WORKDIR) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTARG')} spids: [162] ) ] ) ] spids: [158 159 166 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [(C {<echo>}) (C {<usage>})] spids: [169 170 179 -1] ) ] ) ] ) ) (C {<shift>} { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: <Id.Lit_ArithVarLike OPTIND> right: {<Id.Lit_Digits 1>} ) ) } ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<usage>})] spids: [197 210] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CONFLICTS) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$WORKDIR') <'/conflicts'>} spids: [218] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OLD) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$WORKDIR') <'/old'>} spids: [222] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:NEW) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$WORKDIR') <'/current'>} spids: [226] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TEST) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$WORKDIR') <'/test'>} spids: [230] ) ] ) (command.ShFunction name: build_trees body: (BraceGroup children: [ (C {<local>} {<i>} {<j>} {<k>}) (C {<rm>} {<-rf>} {($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$NEW')} {($ Id.VSub_DollarName '$TEST')} {($ Id.VSub_DollarName '$CONFLICTS')} ) (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$NEW')} {($ Id.VSub_DollarName '$TEST')} ) (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$TEST') <'/etc'>}) (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$TEST') <'/var/db'>}) (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$TEST') <'/usr/share/zoneinfo'>}) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$TEST') <'/usr/share/zoneinfo/foo'>} ) ] do_fork: T ) ] ) ) (command.ShFunction name: missing body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-e>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} {<-o>} {<-L>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' should be missing'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [368] ) ] ) ] spids: [335 356] ) ] ) ] ) ) (command.ShFunction name: link body: (BraceGroup children: [ (C {<local>} {<val>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<Id.Lit_LBracket '['>} {<-L>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} {<Id.Lit_RBracket ']'>} ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' should be a link'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [423] ) ] ) ] spids: [396 411] ) (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-gt>} {<1>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:val) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<readlink>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} ) ) } spids: [443] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$val'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_Number '$2'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} { (DQ <'Link '> ($ Id.VSub_Number '$1') <' should link to '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) ($ Id.VSub_Number '$2') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [488] ) ] ) ] spids: [455 473] ) ] ) ] spids: [427 440] ) ] ) ] ) ) (command.ShFunction name: file body: (BraceGroup children: [ (C {<local>} {<contents>} {<sum>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<Id.Lit_LBracket '['>} {<-f>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} {<Id.Lit_RBracket ']'>} ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' should be a regular file'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [551] ) ] ) ] spids: [524 539] ) (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-eq>} {<2>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:contents) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<cat>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} ) ) } spids: [571] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$contents'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_Number '$2'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' has wrong contents'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [613] ) ] ) ] spids: [583 601] ) ] ) ] spids: [555 568] ) (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-eq>} {<3>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:sum) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<md5>} {<-q>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} ) ) } spids: [636] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$sum'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_Number '$3'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' has wrong contents'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [680] ) ] ) ] spids: [650 668] ) ] ) ] spids: [620 633] ) ] ) ] ) ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<id>} {<-u>}))} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'must be root'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] spids: [692 711] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-r>} {<'/etc/etcupdate.conf'>} {<Id.Lit_RBracket ']'>}) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<echo>} {(DQ <'WARNING: /etc/etcupdate.conf settings may break some tests.'>)})] spids: [728 739] ) ] ) (C {<build_trees>}) (command.Simple words: [ {($ Id.VSub_DollarName '$COMMAND')} {<-nr>} {<-d>} {($ Id.VSub_DollarName '$WORKDIR')} {<-D>} {($ Id.VSub_DollarName '$TEST')} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>} ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin:{<EOF>} here_end_span_id:787) ) ] do_fork: T ) (C {<echo>} {(DQ <'Differences for no /etc/localtime with -n:'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [821] ) ] ) ] ) (command.Simple words: [ {($ Id.VSub_DollarName '$COMMAND')} {<-r>} {<-d>} {($ Id.VSub_DollarName '$WORKDIR')} {<-D>} {($ Id.VSub_DollarName '$TEST')} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>} ) ] do_fork: T ) (C {<echo>} {(DQ <'Differences for no /etc/localtime:'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [875] ) ] ) ] ) (C {<missing>} {<'/etc/localtime'>}) (C {<missing>} {<'/var/db/zoneinfo'>}) (C {<build_trees>}) (C {<ln>} {<-s>} {<'/dev/null'>} {($ Id.VSub_DollarName '$TEST') <'/etc/localtime'>}) (command.Simple words: [ {($ Id.VSub_DollarName '$COMMAND')} {<-nr>} {<-d>} {($ Id.VSub_DollarName '$WORKDIR')} {<-D>} {($ Id.VSub_DollarName '$TEST')} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>} ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin:{<EOF>} here_end_span_id:933) ) ] do_fork: T ) (C {<echo>} {(DQ <'Differences for symlinked /etc/localtime with -n:'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [967] ) ] ) ] ) (command.Simple words: [ {($ Id.VSub_DollarName '$COMMAND')} {<-r>} {<-d>} {($ Id.VSub_DollarName '$WORKDIR')} {<-D>} {($ Id.VSub_DollarName '$TEST')} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>} ) ] do_fork: T ) (C {<echo>} {(DQ <'Differences for symlinked /etc/localtime:'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [1021] ) ] ) ] ) (C {<link>} {<'/etc/localtime'>} {(DQ <'/dev/null'>)}) (C {<missing>} {<'/var/db/zoneinfo'>}) (C {<build_trees>}) (command.Simple words: [{<echo>} {(DQ <bar>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$TEST') <'/etc/localtime'>} ) ] do_fork: T ) (command.Simple words: [ {($ Id.VSub_DollarName '$COMMAND')} {<-nr>} {<-d>} {($ Id.VSub_DollarName '$WORKDIR')} {<-D>} {($ Id.VSub_DollarName '$TEST')} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>} ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 1087 stdin_parts: [ <'Warnings:\n'> <' Needs update: /etc/localtime (required manual update via tzsetup(8))\n'> ] ) ) ] do_fork: T ) (C {<echo>} {(DQ <'Differences for missing /var/db/zoneinfo with -n:'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [1121] ) ] ) ] ) (command.Simple words: [ {($ Id.VSub_DollarName '$COMMAND')} {<-r>} {<-d>} {($ Id.VSub_DollarName '$WORKDIR')} {<-D>} {($ Id.VSub_DollarName '$TEST')} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>} ) ] do_fork: T ) (C {<echo>} {(DQ <'Differences for missing /var/db/zoneinfo:'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [1175] ) ] ) ] ) (C {<file>} {<'/etc/localtime'>} {(DQ <bar>)}) (C {<missing>} {<'/var/db/zoneinfo'>}) (C {<build_trees>}) (command.Simple words: [{<echo>} {(DQ <bar>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$TEST') <'/etc/localtime'>} ) ] do_fork: T ) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$TEST') <'/var/db/zoneinfo'>} ) ] do_fork: T ) (command.Simple words: [ {($ Id.VSub_DollarName '$COMMAND')} {<-nr>} {<-d>} {($ Id.VSub_DollarName '$WORKDIR')} {<-D>} {($ Id.VSub_DollarName '$TEST')} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>} ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin:{<EOF>} here_end_span_id:1250) ) ] do_fork: T ) (C {<echo>} {(DQ <'Differences for real update with -n:'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [1284] ) ] ) ] ) (command.Simple words: [ {($ Id.VSub_DollarName '$COMMAND')} {<-r>} {<-d>} {($ Id.VSub_DollarName '$WORKDIR')} {<-D>} {($ Id.VSub_DollarName '$TEST')} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>} ) ] do_fork: T ) (C {<echo>} {(DQ <'Differences for real update:'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [1338] ) ] ) ] ) (C {<file>} {<'/etc/localtime'>} {(DQ <foo>)}) (C {<file>} {<'/var/db/zoneinfo'>} {(DQ <foo>)}) (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name FAILED))} {<Id.Lit_Equals '='>} {<no>} {<Id.Lit_RBracket ']'>} ) ] )