(CommandList children: [ (C {(source)} {(sources/utility_functions.sh)}) (If arms: [ (if_arm cond: [(C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-lt)} {(1)} {(Lit_Other ']')})] action: [ (SimpleCommand words: [{(echo)} {(DQ ('Usage: timeout.sh SECONDS COMMANDS...'))}] redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 35] ) ] spids: [16777215 52] ) (C {(trap)} {(DQ ('killtree ') ($ VSub_Dollar '$$'))} {(EXIT)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:TIMEOUT) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [64] ) ] spids: [64] ) (C {(shift)}) (Pipeline children: [ (Subshell child:(C {(eval)} {(DQ ($ VSub_At '$@'))}) spids:[71 79]) (C {(tee)} { (CommandSubPart command_list: (CommandList children: [ (Sentence child: (WhileUntil keyword: <KW_While while> cond: [ (Sentence child: (C {(read)} {(-t)} {(DQ ($ VSub_Name '$TIMEOUT'))} {(-n)} {(32)} {(i)}) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [(Sentence child:(C {(true)}) terminator:<Op_Semi ';'>)] spids: [103 108] ) ) terminator: <Op_Semi ';'> ) (Sentence child:(C {(sleep)} {(1)}) terminator:<Op_Semi ';'>) (SimpleCommand words: [{(kill)} {(-TERM)} {($ VSub_Dollar '$$')}] redirects: [(Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})] ) ] ) left_token: <Left_ProcSubOut '>('> spids: [85 125] ) } ) ] negated: F ) ] )