(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:<Id.Redir_GreatAnd '1>&'> fd:1 arg_word:{<2>})] ) (command.Simple words: [ {<echo>} { (DQ <'or '> ($ Id.VSub_Number '$0') <' { daily | weekly | monthly | security }'>) } ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '1>&'> fd:1 arg_word:{<2>})] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ) (command.ShFunction name: output_pipe body: (command.BraceGroup children: [ (C {<eval>} {<Id.Lit_VarLike 'output='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) (braced_var_sub token: <Id.VSub_Number 1> 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: <Id.VSub_Number 2> suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonPlus arg_word: {<' '>} ) ) (braced_var_sub token: <Id.VSub_Number 1> 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: <Id.Op_Semi _> ) ] 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: <Id.Op_Semi _> ) ] 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: <Id.Left_Backtick '`'> 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: <Id.Op_Semi _> ) ] 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: <Id.VSub_Name arg> 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: <Id.VSub_Name arg> 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: <Id.ControlFlow_Exit exit> 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: <Id.Op_Semi _> ) ] 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: <Id.Op_Semi _> ) ] action: [ (C {<export>} {<Id.Lit_VarLike 'PERIODIC_ANTICONGESTION_FILE='> (command_sub left_token: <Id.Left_Backtick '`'> command_list: (command.CommandList children: [ (C {<mktemp>} { (braced_var_sub token: <Id.VSub_Name TMPDIR> 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: <Id.Redir_Great '>'> fd: -1 arg_word: {</dev/null>} ) (redir.Redir op:<Id.Redir_GreatAnd '2>&'> fd:2 arg_word:{<1>}) ] ) terminator: <Id.Op_Semi _> ) ] 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: <Id.Left_Backtick '`'> command_list: (command.CommandList children: [ (C {<mktemp>} { (braced_var_sub token: <Id.VSub_Name TMPDIR> 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: <Id.VSub_Name PERIODIC> 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: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<eval>} {<echo>} { (DQ (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) (braced_var_sub token: <Id.VSub_Name arg> 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: <Id.Op_Semi _> ) ] 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:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.ControlFlow token:<Id.ControlFlow_Continue continue>) ] ) ] 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: <Id.Op_Semi _> ) ] 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: <Id.Redir_Less '<'> fd: -1 arg_word: {</dev/null>} ) (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$tmp_output')} ) (redir.Redir op: <Id.Redir_GreatAnd '2>&'> 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: <Id.Op_Semi _> ) ] 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: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:empty) op: assign_op.Equal rhs: {<FALSE>} spids: [944] ) ] ) terminator: <Id.Op_Semi _> ) ] ) ] ) ] 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: <Id.Op_Semi _> ) ] 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: <Id.Op_Semi _> ) ] 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')}) ] )