(command.CommandList children: [ (command.ShAssignment left: <Id.Lit_VarLike 'command='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'command='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'command='> name:command) op: assign_op.Equal rhs: {<changes>} ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Subshell left: <Id.Op_LParen _> child: (command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: <getopts> more_env: [] words: [{<getopts>} {(SQ <'[-][123:xyz]'>)} {<opt>} {<--xyz>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<0> ($ Id.VSub_DollarName opt)}] redirects: [] do_fork: T ) ] ) right: <Id.Right_Subshell _> redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] ) right: <Id.Backtick_Right '`'> ) } ) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <0123> pattern: (pat.Words words:[{<0123>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'ARGV0='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ARGV0='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ARGV0='> name:ARGV0) op: assign_op.Equal rhs: {(DQ <'-a '> ($ Id.VSub_DollarName command))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'USAGE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'USAGE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'USAGE='> name:USAGE) op: assign_op.Equal rhs: { (SingleQuoted left: <Id.Left_DollarSingleQuote '$\''> tokens: [ <Id.Char_Literals '\n'> <Id.Char_Literals '[-?\n'> <Id.Char_Literals '@(#)$Id: changes (AT&T Research) 2010-01-20 $\n'> <Id.Char_Literals ']\n'> ] right: <Id.Right_SingleQuote '\''> ) ($ Id.VSub_DollarName USAGE_LICENSE) (SingleQuoted left: <Id.Left_DollarSingleQuote '$\''> tokens: [ <Id.Char_Literals '\n'> <Id.Char_Literals '[+NAME?changes - list changed $PACKAGEROOT package source files]\n' > <Id.Char_Literals '[+DESCRIPTION?'> <Id.Char_OneChar '\\b'> <Id.Char_Literals changes> <Id.Char_OneChar '\\b'> <Id.Char_Literals ' lists $PACKAGEROOT relative package source\n'> <Id.Char_Literals ' files that changed between '> <Id.Char_OneChar '\\a'> <Id.Char_Literals from-date> <Id.Char_OneChar '\\a'> <Id.Char_Literals ' between '> <Id.Char_OneChar '\\a'> <Id.Char_Literals to-date> <Id.Char_OneChar '\\a'> <Id.Char_Literals '. The\n'> <Id.Char_Literals ' default '> <Id.Char_OneChar '\\a'> <Id.Char_Literals from-date> <Id.Char_OneChar '\\a'> <Id.Char_Literals ' is the modify time of '> <Id.Char_OneChar '\\b'> <Id.Char_Literals '$PACKAGEROOT/README'> <Id.Char_OneChar '\\b'> <Id.Char_Literals '.\n'> <Id.Char_Literals ' The default '> <Id.Char_OneChar '\\a'> <Id.Char_Literals to-date> <Id.Char_OneChar '\\a'> <Id.Char_Literals ' is '> <Id.Char_OneChar '\\b'> <Id.Char_Literals now> <Id.Char_OneChar '\\b'> <Id.Char_Literals '. The changed files are listed by\n'> <Id.Char_Literals ' '> <Id.Char_OneChar '\\b'> <Id.Char_Literals ls> <Id.Char_OneChar '\\b'> <Id.Char_Literals '(1) with the optional '> <Id.Char_OneChar '\\b'> <Id.Char_Literals ls-option> <Id.Char_OneChar '\\b'> <Id.Char_Literals ' operands.]\n'> <Id.Char_Literals '[p:package?List source files for '> <Id.Char_OneChar '\\a'> <Id.Char_Literals package> <Id.Char_OneChar '\\a'> <Id.Char_Literals ' only. Multiple\n'> <Id.Char_Literals ' '> <Id.Char_OneChar '\\b'> <Id.Char_Literals --package> <Id.Char_OneChar '\\b'> <Id.Char_Literals ' options may be specified. By default source files for all\n' > <Id.Char_Literals ' packages in '> <Id.Char_OneChar '\\b'> <Id.Char_Literals '$PACKAGEROOT/lib/package'> <Id.Char_OneChar '\\b'> <Id.Char_Literals ' are checked.]:[package]\n'> <Id.Char_Literals '\n'> <Id.Char_Literals '[ from-date [ to-date ] ] [ -- ls-option ... ]\n'> <Id.Char_Literals '\n'> <Id.Char_Literals '[+SEE ALSO?'> <Id.Char_OneChar '\\b'> <Id.Char_Literals tw> <Id.Char_OneChar '\\b'> <Id.Char_Literals '(1), '> <Id.Char_OneChar '\\b'> <Id.Char_Literals ls> <Id.Char_OneChar '\\b'> <Id.Char_Literals '(1)]\n'> ] right: <Id.Right_SingleQuote '\''> ) } ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'ARGV0='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ARGV0='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ARGV0='> name:ARGV0) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'USAGE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'USAGE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'USAGE='> name:USAGE) op: assign_op.Equal rhs: {(DQ <' table ...'>)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ShFunction name_tok: <usage> name: usage body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTIND='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTIND='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTIND='> name:OPTIND) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.Simple blame_tok: <getopts> more_env: [] words: [ {<getopts>} {($ Id.VSub_DollarName ARGV0)} {(DQ ($ Id.VSub_DollarName USAGE))} {<OPT>} {(SQ <'-?'>)} ] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<2>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike 'packages='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'packages='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'packages='> name:packages) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <getopts> more_env: [] words: [ {<getopts>} {($ Id.VSub_DollarName ARGV0)} {(DQ ($ Id.VSub_DollarName USAGE))} {<OPT>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName OPT)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <p> pattern: (pat.Words words:[{<p>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.WordTest w:{($ Id.VSub_DollarName packages)}) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'packages='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'packages='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'packages='> name: packages ) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName packages) <'|'> ($ Id.VSub_DollarName OPTARG) ) } ) ] redirects: [] ) ] spids: [262 271] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'packages='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'packages='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'packages='> name:packages) op: assign_op.Equal rhs: {($ Id.VSub_DollarName OPTARG)} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>} {($ Id.VSub_DollarName OPTIND) <-1>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.LogicalNot child: (bool_expr.WordTest w:{($ Id.VSub_DollarName PACKAGEROOT)}) ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <print> more_env: [] words: [ {<print>} {<-u2>} {($ Id.VSub_DollarName command) <Id.Lit_Colon ':'>} {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <PACKAGEROOT> <Id.Lit_Colon ':'> } {<package>} {<root>} {<dir>} {<not>} {<exported>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [312 322] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <cd> more_env: [] words: [{<cd>} {($ Id.VSub_DollarName PACKAGEROOT)}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit>) ] ops: [<Id.Op_DPipe _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.WordTest w:{($ Id.VSub_DollarName packages)}) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'packages='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'packages='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'packages='> name:packages) op: assign_op.Equal rhs: {(DQ <'@(?(*-)('> ($ Id.VSub_DollarName packages) <'))'>)} ) ] redirects: [] ) ] spids: [361 369] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'packages='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'packages='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'packages='> name:packages) op: assign_op.Equal rhs: {(SQ <'*'>)} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'packages='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'packages='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'packages='> name:packages) op: assign_op.Equal rhs: {($ Id.VSub_DollarName packages) <.pkg>} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.LogicalOr left: (bool_expr.LogicalNot child:(bool_expr.WordTest w:{($ Id.VSub_Number 1)})) right: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_Number 1)} right: {<-> <Id.Lit_Other '*'>} ) ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.LogicalNot child: (bool_expr.Unary op_id:Id.BoolUnary_f child:{<README>}) ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <print> more_env: [] words: [ {<print>} {<-u2>} {($ Id.VSub_DollarName command) <Id.Lit_Colon ':'>} {<a>} {<date>} {<must>} {<be>} {<specified>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [413 426] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'from='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'from='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'from='> name:from) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <date> more_env: [] words: [{<date>} {<-f>} {<Id.Lit_Other '%'> <K>} {<-m>} {<README>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] spids: [392 411] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'from='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'from='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'from='> name:from) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'from='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'from='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'from='> name:from) op: assign_op.Equal rhs: {(DQ <'&& mtime >= \''> ($ Id.VSub_DollarName from) <'\''>)} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.LogicalAnd left: (bool_expr.WordTest w:{($ Id.VSub_Number 1)}) right: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: {($ Id.VSub_Number 1)} right: {<-> <Id.Lit_Other '*'>} ) ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'to='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'to='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'to='> name:to) op: assign_op.Equal rhs: {(DQ <' && mtime <= \''> ($ Id.VSub_Number 1) <'\''>)} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] spids: [485 502] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'to='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'to='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'to='> name:to) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'ls_options='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ls_options='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ls_options='> name:ls_options) op: assign_op.Equal rhs: {($ Id.VSub_Star '*')} ) ] redirects: [] ) (command.Simple blame_tok: <set> more_env: [] words: [ {<set>} {<-->} { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {<print>} {<'lib/package/'> ($ Id.VSub_DollarName packages)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.LogicalNot child: (bool_expr.Unary op_id:Id.BoolUnary_f child:{($ Id.VSub_Number 1)}) ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <print> more_env: [] words: [ {<print>} {<-u2>} {($ Id.VSub_DollarName command) <Id.Lit_Colon ':'>} {<'lib/package'> <Id.Lit_Colon ':'>} {<no>} {<packages>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [537 549] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'packages='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'packages='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'packages='> name:packages) op: assign_op.Equal rhs: {($ Id.VSub_Star '*')} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'components='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'components='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'components='> name:components) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'sep='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'sep='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'sep='> name:sep) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [pkg] iterable: (for_iter__Args) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<line>}] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName line)} right: {<Id.Lit_Other '*'> <Id.Lit_Colon ':'> <PACKAGE> <Id.Lit_Colon ':'> <Id.Lit_Other '*'> } ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-->} {($ Id.VSub_DollarName line)}] redirects: [] do_fork: T ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.AndOr children: [ (command.DParen left: <Id.Op_DLeftParen _> child: {($ Id.VSub_Pound '#')} right: <Id.Op_DRightParen _> redirects: [] ) (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: {($ Id.VSub_Number 1)} right: {<Id.Lit_Colon ':'> <PACKAGE> <Id.Lit_Colon ':'>} ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.DParen left: <Id.Op_DLeftParen _> child: {($ Id.VSub_Pound '#')} right: <Id.Op_DRightParen _> redirects: [] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ForEach keyword: <Id.KW_For for> iter_names: [p] iterable: (for_iter__Args) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'p='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p='> name: p ) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name p> var_name: p suffix_op: (suffix_op.Unary op: <Id.VOp1_Pound '#'> arg_word: {(SQ <'$(PACKAGEROOT)/'>)} ) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: {($ Id.VSub_DollarName p)} right: {<Id.Lit_Other '*'> (SQ <'$('>) <Id.Lit_Other '*'> } ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'components='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'components='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'components='> name: components ) op: assign_op.Equal rhs: {($ Id.VSub_DollarName components) ($ Id.VSub_DollarName sep) ($ Id.VSub_DollarName p) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'sep='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'sep='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'sep='> name: sep ) op: assign_op.Equal rhs: {(SQ <' '>)} ) ] redirects: [] ) ] spids: [684 701] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] spids: [652 662] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [594 611] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [ (Redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {($ Id.VSub_DollarName pkg)} ) ] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.LogicalNot child: (bool_expr.WordTest w:{($ Id.VSub_DollarName components)}) ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <print> more_env: [] words: [ {<print>} {<-u2>} {($ Id.VSub_DollarName command) <Id.Lit_Colon ':'>} { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name packages> var_name: packages suffix_op: (suffix_op.PatSub pat: {(SQ <' '>)} replace: {<','>} replace_mode: Id.Lit_Slash slash_tok: <Id.VOp2_Slash _> ) right: <Id.Right_DollarBrace '}'> ) <Id.Lit_Colon ':'> } {<no>} {<components>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [738 748] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <tw> more_env: [] words: [ {<tw>} { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} {<ls>} {<-d>} {($ Id.VSub_DollarName packages)} {<'src/'> (word_part.ExtGlob op: <Id.ExtGlob_At '@('> arms: [{<lib>} {<cmd>}] right: <Id.Right_ExtGlob _> ) <'/'> (word_part.ExtGlob op: <Id.ExtGlob_At '@('> arms: [ { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name components> var_name: components suffix_op: (suffix_op.PatSub pat: {(SQ <' '>)} replace: {(SQ <'|'>)} replace_mode: Id.Lit_Slash slash_tok: <Id.VOp2_Slash _> ) right: <Id.Right_DollarBrace '}'> ) } ] right: <Id.Right_ExtGlob _> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(SQ <'s/^/-d /'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } {<-e>} {(DQ <'type != DIR'> ($ Id.VSub_DollarName from) ($ Id.VSub_DollarName to))} {<ls>} {($ Id.VSub_DollarName ls_options)} ] redirects: [] do_fork: T ) ] )