(command.CommandList children: [ (command.ShFunction name: usage body: (command.BraceGroup children: [ (command.Simple words: [ {(echo)} {(DQ ('usage: ') ($ Id.VSub_Number '$0') (' <directory of files to execute>'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:44) fd: 1 arg_word: {(2)} ) ] ) (command.Simple words: [ {(echo)} { (DQ ('or ') ($ Id.VSub_Number '$0') (' { daily | weekly | monthly | security }')) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:56) fd: 1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:60) arg_word: {(1)} ) ] ) ) (command.ShFunction name: output_pipe body: (command.BraceGroup children: [ (C {(eval)} {(Id.Lit_VarLike 'output=') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:81) ) (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:83) suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPound arg_word:{('*') (Id.Lit_Slash /)}) ) (_output) } ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$output'))} arms: [ (case_arm pat_list: [{(/) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pipe) op: assign_op.Equal rhs: {(DQ ('cat >>') ($ Id.VSub_DollarName '$output'))} spids: [104] ) ] ) ] spids: [100 102 109 -1] ) (case_arm pat_list: [{(DQ )}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pipe) op: assign_op.Equal rhs: {(cat)} spids: [116] ) ] ) ] spids: [112 114 118 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pipe) op: assign_op.Equal rhs: { (DQ ("mail -E -s '") ($ Id.VSub_DollarName '$host') (' ') (${ Id.VSub_Number 2) (braced_var_sub token: (Token id:Id.VSub_Number val:2 span_id:133) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonPlus arg_word: {(' ')} ) ) (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:138) suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPound arg_word: {('*') (Id.Lit_Slash /)} ) ) (" run output' ") ($ Id.VSub_DollarName '$output') ) } spids: [124] ) ] ) ] spids: [121 122 146 -1] ) ] ) (C {(eval)} {($ Id.VSub_DollarName '$pipe')}) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-lt)} {(1)} {(Id.Lit_RBracket ']')}) terminator: (Token id:Id.Op_Semi val:';' span_id:171) ) ] action: [(C {(usage)})] spids: [159 173] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-r)} {(/etc/defaults/periodic.conf)} {(Id.Lit_RBracket ']')}) terminator: (Token id:Id.Op_Semi val:';' span_id:196) ) ] action: [(C {(.)} {(/etc/defaults/periodic.conf)}) (C {(source_periodic_confs)})] spids: [187 198] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:host) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:212) command_list: (command.CommandList children:[(C {(hostname)})]) ) } spids: [211] ) ] ) (C {(export)} {(host)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Number '$1')} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (LOCKED))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:252) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ret) op: assign_op.Equal rhs: {(0)} spids: [257] ) ] ) (command.ForEach iter_name: arg do_arg_iter: T body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:lockfile) op: assign_op.Equal rhs: {(/var/run/periodic.) (braced_var_sub token: (Token id:Id.VSub_Name val:arg span_id:272) suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPound arg_word: {('*') (Id.Lit_Slash /)} ) ) (.lock) } spids: [269] ) ] ) (C {(lockf)} {(-t)} {(0)} {(DQ (${ Id.VSub_Name lockfile))} {(/bin/sh)} {($ Id.VSub_Number '$0')} {(LOCKED)} {(DQ ($ Id.VSub_DollarName '$arg'))} ) (command.Case to_match: {($ Id.VSub_QMark '$?')} arms: [ (case_arm pat_list:[{(0)}] spids:[310 311 313 -1]) (case_arm pat_list: [{(73)}] action: [ (command.Pipeline children: [ (C {(echo)} {(DQ ("can't create ") (${ Id.VSub_Name lockfile))}) (C {(output_pipe)} {($ Id.VSub_DollarName '$arg')} {(DQ ($ Id.VSub_DollarName '$PERIODIC'))} ) ] negated: F ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ret) op: assign_op.Equal rhs: {(1)} spids: [345] ) ] ) ] spids: [316 317 349 -1] ) (case_arm pat_list: [{(75)}] action: [ (command.Pipeline children: [ (C {(echo)} { (DQ ($ Id.VSub_DollarName '$host') (' ') (braced_var_sub token: (Token id:Id.VSub_Name val:arg span_id:365) suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPound arg_word: {('*') (Id.Lit_Slash /)} ) ) (' prior run still in progress') ) } ) (C {(output_pipe)} {($ Id.VSub_DollarName '$arg')} {(DQ ($ Id.VSub_DollarName '$PERIODIC'))} ) ] negated: F ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ret) op: assign_op.Equal rhs: {(1)} spids: [386] ) ] ) ] spids: [352 353 390 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ret) op: assign_op.Equal rhs: {(1)} spids: [397] ) ] ) ] spids: [393 394 401 -1] ) ] ) ] ) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:410) arg_word: {($ Id.VSub_DollarName '$ret')} ) ] spids: [238 254] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-ne)} {(2)} {(Id.Lit_RBracket ']')}) terminator: (Token id:Id.Op_Semi val:';' span_id:428) ) ] action: [(C {(usage)})] spids: [417 430] ) ] ) (C {(shift)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:arg) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [439] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$PERIODIC_ANTICONGESTION_FILE'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:455) ) ] action: [ (C {(export)} {(Id.Lit_VarLike 'PERIODIC_ANTICONGESTION_FILE=') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:463) command_list: (command.CommandList children: [ (C {(mktemp)} { (braced_var_sub token: (Token id:Id.VSub_Name val:TMPDIR span_id:469) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {(Id.Lit_Slash /) (tmp)} ) ) (/periodic.anticongestion.XXXXXXXXXX) } ) ] ) ) } ) ] spids: [443 457] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Simple words: [{(tty)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:483) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:487) fd: 2 arg_word: {(1)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:489) ) ] action: [(C {(export)} {(Id.Lit_VarLike 'PERIODIC_IS_INTERACTIVE=') (1)})] spids: [479 491] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tmp_output) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:502) command_list: (command.CommandList children: [ (C {(mktemp)} { (braced_var_sub token: (Token id:Id.VSub_Name val:TMPDIR span_id:508) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {(Id.Lit_Slash /) (tmp)} ) ) (/periodic.XXXXXXXXXX) } ) ] ) ) } spids: [501] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:context) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$PERIODIC'))} spids: [516] ) ] ) (C {(export)} {(Id.Lit_VarLike 'PERIODIC=') (DQ ($ Id.VSub_DollarName '$arg') (braced_var_sub token: (Token id:Id.VSub_Name val:PERIODIC span_id:527) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonPlus arg_word:{(' ')}) ) (${ Id.VSub_Name PERIODIC) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:success) op: assign_op.Equal rhs: {(YES)} spids: [547] ) (assign_pair lhs: (sh_lhs_expr.Name name:info) op: assign_op.Equal rhs: {(YES)} spids: [550] ) (assign_pair lhs: (sh_lhs_expr.Name name:badconfig) op: assign_op.Equal rhs: {(NO)} spids: [553] ) (assign_pair lhs: (sh_lhs_expr.Name name:empty_output) op: assign_op.Equal rhs: {(YES)} spids: [556] ) ] ) (command.ForEach iter_name: var iter_words: [{(success)} {(info)} {(badconfig)} {(empty_output)}] do_arg_iter: F body: (command.DoGroup children: [ (command.Case to_match: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:582) command_list: (command.CommandList children: [ (C {(eval)} {(echo)} { (DQ (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:588) ) (braced_var_sub token: (Token id:Id.VSub_Name val:arg span_id:590) suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPound arg_word: {('*') (Id.Lit_Slash /)} ) ) (_show_) ($ Id.VSub_DollarName '$var') ) } ) ] ) ) } arms: [ (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') } ] action: [(C {(eval)} {($ Id.VSub_DollarName '$var') (Id.Lit_Equals '=') (YES)})] spids: [603 612 619 -1] ) (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) (Id.Lit_RBracket ']') } ] action: [(C {(eval)} {($ Id.VSub_DollarName '$var') (Id.Lit_Equals '=') (NO)})] spids: [622 628 635 -1] ) ] ) ] ) ) (command.Case to_match: {($ Id.VSub_DollarName '$arg')} arms: [ (case_arm pat_list: [{(/) (Id.Lit_Star '*')}] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-d)} {(DQ ($ Id.VSub_DollarName '$arg'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:664) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dirlist) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$arg'))} spids: [669] ) ] ) ] spids: [653 666] ) ] else_action: [ (command.Simple words: [ {(echo)} {(DQ ($ Id.VSub_Number '$0') (': ') ($ Id.VSub_DollarName '$arg') (' not found'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:687) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:691) ) ] ) ] spids: [649 651 697 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dirlist) op: assign_op.Equal rhs: (word.Empty) spids: [702] ) ] ) (command.ForEach iter_name: top iter_words: [{(/etc/periodic)} {(${ Id.VSub_Name local_periodic)}] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-d)} {($ Id.VSub_DollarName '$top') (/) ($ Id.VSub_DollarName '$arg')} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dirlist) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$dirlist') (' ') ($ Id.VSub_DollarName '$top') (/) ($ Id.VSub_DollarName '$arg') ) } spids: [733] ) ] ) ] ) ] ) ) ] spids: [699 700 746 -1] ) ] ) (command.Pipeline children: [ (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:empty) op: assign_op.Equal rhs: {(TRUE)} spids: [754] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:processed) op: assign_op.Equal rhs: {(0)} spids: [758] ) ] ) (command.ForEach iter_name: dir iter_words: [{($ Id.VSub_DollarName '$dirlist')}] do_arg_iter: F body: (command.DoGroup children: [ (command.ForEach iter_name: file iter_words: [{($ Id.VSub_DollarName '$dir') (/) (Id.Lit_Star '*')}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-x)} {($ Id.VSub_DollarName '$file')} {(-a)} {(Id.KW_Bang '!')} {(-d)} {($ Id.VSub_DollarName '$file')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:805) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:output) op: assign_op.Equal rhs: {(TRUE)} spids: [810] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:processed) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$processed')} ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [814] ) ] ) (command.Simple words: [{($ Id.VSub_DollarName '$file')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:827) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:830) fd: -1 arg_word: {($ Id.VSub_DollarName '$tmp_output')} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:833) fd: 2 arg_word: {(1)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:rc) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [837] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-s)} {($ Id.VSub_DollarName '$tmp_output')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:850) ) ] action: [ (command.Case to_match: {($ Id.VSub_DollarName '$rc')} arms: [ (case_arm pat_list: [{(0)}] action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$success')} {(Id.Lit_Equals '=')} {(NO)} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:output) op: assign_op.Equal rhs: {(FALSE)} spids: [877] ) ] ) ] ) ] spids: [862 863 879 -1] ) (case_arm pat_list: [{(1)}] action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$info')} {(Id.Lit_Equals '=')} {(NO)} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:output) op: assign_op.Equal rhs: {(FALSE)} spids: [897] ) ] ) ] ) ] spids: [882 883 899 -1] ) (case_arm pat_list: [{(2)}] action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$badconfig')} {(Id.Lit_Equals '=')} {(NO)} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:output) op: assign_op.Equal rhs: {(FALSE)} spids: [917] ) ] ) ] ) ] spids: [902 903 919 -1] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$output')} {(Id.Lit_Equals '=')} {(TRUE)} {(Id.Lit_RBracket ']')} ) (command.BraceGroup children: [ (command.Sentence child: (C {(cat)} {($ Id.VSub_DollarName '$tmp_output')} ) terminator: (Token id: Id.Op_Semi val: ';' span_id: 942 ) ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:empty) op: assign_op.Equal rhs: {(FALSE)} spids: [944] ) ] ) terminator: (Token id: Id.Op_Semi val: ';' span_id: 946 ) ) ] ) ] ) ] spids: [841 852] ) ] ) (C {(cp)} {(/dev/null)} {($ Id.VSub_DollarName '$tmp_output')}) ] spids: [788 807] ) ] ) ] ) ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$empty')} {(Id.Lit_Equals '=')} {(TRUE)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:981) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$empty_output')} {(Id.Lit_Equals '=')} {(TRUE)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:997) ) ] action: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$processed')} {(Id.Lit_Equals '=')} {(1)} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:plural) op: assign_op.Equal rhs: (word.Empty) spids: [1014] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:plural) op: assign_op.Equal rhs: {(s)} spids: [1018] ) ] ) ] ) (C {(echo)} { (DQ ('No output from the ') ($ Id.VSub_DollarName '$processed') (' file') ($ Id.VSub_DollarName '$plural') (' processed') ) } ) ] spids: [986 999] ) ] ) ] spids: [970 983] ) ] else_action: [ (C {(echo)} {(DQ )}) (C {(echo)} {(DQ ('-- End of ') ($ Id.VSub_DollarName '$arg') (' output --'))}) ] ) ] ) (C {(output_pipe)} {($ Id.VSub_DollarName '$arg')} {(DQ ($ Id.VSub_DollarName '$context'))}) ] negated: F ) (C {(rm)} {(-f)} {($ Id.VSub_DollarName '$tmp_output')}) (C {(rm)} {(-f)} {($ Id.VSub_DollarName '$PERIODIC_ANTICONGESTION_FILE')}) ] )