(command.CommandList children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-f>} {<'/proc/modules'>} {<Id.Lit_RBracket ']'>}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-x>} {<'/sbin/modprobe'>} {<Id.Lit_RBracket ']'>}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} {<-f>} {<'/etc/default/rcS'>} {<Id.Lit_RBracket ']'>}) (C {<.>} {<'/etc/default/rcS'>}) ] ) (C {<.>} {<'/lib/lsb/init-functions'>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PATH) op: assign_op.Equal rhs: {(SQ <'/sbin:/bin'>)} spids: [88] ) ] ) (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [{<start>}] action: [ (command.If arms: [ (if_arm cond: [(command.Sentence child:(C {<init_is_upstart>}) terminator:<Id.Op_Semi _>)] action: [(command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})] spids: [107 112] ) ] ) ] spids: [103 104 123 -1] ) (case_arm pat_list: [{<stop>} {<restart>} {<reload>} {<force-reload>}] action: [ (C {<log_warning_msg>} {(DQ <'Action \''> ($ Id.VSub_Number '$1') <'\' is meaningless for this init script'>)} ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] spids: [127 134 151 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [ (C {<log_success_msg>} {(DQ <'Usage: '> ($ Id.VSub_Number '$0') <' start'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [155 156 -1 172] ) ] ) (command.ShFunction name: load_module body: (BraceGroup children: [ (C {<local>} {<module>} {<args>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:module) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [189] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:args) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [195] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$VERBOSE'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<no>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<log_action_msg>} {(DQ <'Loading kernel module '> ($ Id.VSub_DollarName '$module'))} ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<modprobe>} {($ Id.VSub_DollarName '$module')} {($ Id.VSub_DollarName '$args')} ) (C {<true>}) ] ) ] spids: [202 218] ) ] else_action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [ {<modprobe>} {($ Id.VSub_DollarName '$module')} {($ Id.VSub_DollarName '$args')} ] 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 {<true>}) ] ) ] ) ] ) ) (command.ShFunction name: modules_files body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'modules_load_dirs='> (SQ < '/etc/modules-load.d /run/modules-load.d /usr/local/lib/modules-load.d /usr/lib/modules-load.d /lib/modules-load.d' > ) } ) (C {<local>} {<Id.Lit_VarLike 'processed='> (SQ <' '>)}) (C {<local>} {<Id.Lit_VarLike 'add_etc_modules='> <true>}) (command.ForEach iter_name: dir iter_words: [{($ Id.VSub_DollarName '$modules_load_dirs')}] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName '$dir')} {<Id.Lit_RBracket ']'>} ) (command.ControlFlow token: <Id.ControlFlow_Continue continue> ) ] ) (command.ForEach iter_name: file iter_words: [ { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [ {<run-parts>} {<--list>} {<--regex> <Id.Lit_Equals '='> (SQ <'\\.conf$'>)} {($ Id.VSub_DollarName '$dir')} ] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (C {<true>}) ] ) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (C {<local>} {<Id.Lit_VarLike 'base='> (braced_var_sub token: <Id.VSub_Name file> suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPound arg_word: {<'*'> <Id.Lit_Slash '/'>} ) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {<echo>} {<-n>} {(DQ ($ Id.VSub_DollarName '$processed'))}) (C {<grep>} {<-qF>} {(DQ <' '> ($ Id.VSub_DollarName '$base') <' '>)} ) ] negated: F ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ControlFlow token: <Id.ControlFlow_Continue continue> ) ] spids: [364 387] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$add_etc_modules'))} {<-a>} {<-L>} {($ Id.VSub_DollarName '$file')} {<-a>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<readlink>} {<-f>} {($ Id.VSub_DollarName '$file')} ) ) ) } {<Id.Lit_Equals '='>} {<'/etc/modules'>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:add_etc_modules) op: assign_op.Equal rhs: (word.Empty) spids: [434] ) ] ) ] spids: [396 431] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:processed) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$processed') ($ Id.VSub_DollarName '$base') <' '> ) } spids: [440] ) ] ) (C {<echo>} {($ Id.VSub_DollarName '$file')}) ] ) ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$add_etc_modules'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [(C {<echo>} {<'/etc/modules'>})] spids: [460 471] ) ] ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$VERBOSE'))} {<Id.Lit_Equals '='>} {<no>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [(C {<log_action_begin_msg>} {(SQ <'Loading kernel modules'>)})] spids: [484 499] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:files) op: assign_op.Equal rhs: {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<modules_files>}))} spids: [511] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$files'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Pipeline children: [ (C {<grep>} {<-h>} {(SQ <'^[^#]'>)} {($ Id.VSub_DollarName '$files')}) (command.WhileUntil keyword: <Id.KW_While while> cond: [ (command.Sentence child: (C {<read>} {<module>} {<args>}) terminator: <Id.Op_Semi _> ) ] body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$module'))} {<Id.Lit_RBracket ']'>} ) (command.ControlFlow token: <Id.ControlFlow_Continue continue> ) ] ) (C {<load_module>} {(DQ ($ Id.VSub_DollarName '$module'))} {(DQ ($ Id.VSub_DollarName '$args'))} ) ] ) ) ] negated: F ) ] spids: [516 528] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$VERBOSE'))} {<Id.Lit_Equals '='>} {<no>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [(C {<log_action_end_msg>} {<0>})] spids: [585 600] ) ] ) ] )