(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tracing) op: assign_op.Equal rhs: {</sys/kernel/debug/tracing>} spids: [157] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:flock) op: assign_op.Equal rhs: {</var/tmp/.ftrace-lock>} spids: [160] ) ] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:wroteflock) op: assign_op.Equal rhs: {<0>} spids: [164] ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_duration) op: assign_op.Equal rhs: {<0>} spids: [167] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:duration) op: assign_op.Equal rhs: (word.Empty) spids: [171] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_pid) op: assign_op.Equal rhs: {<0>} spids: [174] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pid) op: assign_op.Equal rhs: (word.Empty) spids: [178] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_tid) op: assign_op.Equal rhs: {<0>} spids: [181] ) ] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tid) op: assign_op.Equal rhs: (word.Empty) spids: [185] ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_filter) op: assign_op.Equal rhs: {<0>} spids: [187] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter) op: assign_op.Equal rhs: (word.Empty) spids: [191] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_view) op: assign_op.Equal rhs: {<0>} spids: [194] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_headers) op: assign_op.Equal rhs: {<0>} spids: [198] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_stack) op: assign_op.Equal rhs: {<0>} spids: [202] ) ] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dmesg) op: assign_op.Equal rhs: {<2>} spids: [206] ) ] ) ] ) (C {<trap>} {(SQ <':'>)} {<INT>} {<QUIT>} {<TERM>} {<PIPE>} {<HUP>}) (command.ShFunction name: usage body: (command.BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir.HereDoc op: <Id.Redir_DLessDash '<<-'> fd: -1 here_begin: {<END>} here_end_span_id: 270 stdin_parts: [ <'USAGE: tpoint [-hHsv] [-d secs] [-p PID] [-L TID] tracepoint [filter]\n'> <' tpoint -l\n'> <' -d seconds # trace duration, and use buffers\n'> <' -p PID # PID to match on event\n'> <' -L TID # thread id to match on event\n'> <" -v # view format file (don't trace)\n"> <' -H # include column headers\n'> <' -l # list all tracepoints\n'> <' -s # show kernel stack traces\n'> <' -h # this usage message\n'> <' eg,\n'> <' tpoint -l | grep open\n'> <' # find tracepoints containing '> <Id.Right_DoubleQuote '"'> <open> <Id.Right_DoubleQuote '"'> <'\n'> <' tpoint syscalls:sys_enter_open\n'> <' # trace open() syscall entry\n'> <' tpoint block:block_rq_issue\n'> <' # trace block I/O issue\n'> <' tpoint -s block:block_rq_issue\n'> <' # show kernel stacks\n'> <'\n'> <'See the man page and example file for more info.\n'> ] ) (redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>}) ] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] ) ) (command.ShFunction name: warn body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [(C {<eval>} {(DQ ($ Id.VSub_At '$@'))})] negated: T ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [ {<echo>} { (DQ <'WARNING: command failed '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) ($ Id.VSub_At '$@') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) ) } ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) ] spids: [284 295] ) ] ) ] ) ) (command.ShFunction name: end body: (command.BraceGroup children: [ (command.Simple words: [{<echo>}] redirects: [(redir.Redir op:<Id.Redir_Great '2>'> fd:2 arg_word:{</dev/null>})] ) (command.Simple words: [{<echo>} {(DQ <'Ending tracing...'>)}] redirects: [(redir.Redir op:<Id.Redir_Great '2>'> fd:2 arg_word:{</dev/null>})] ) (C {<cd>} {($ Id.VSub_DollarName '$tracing')}) (C {<warn>} {(DQ <'echo 0 > '> ($ Id.VSub_DollarName '$tdir') </enable>)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_filter>) ) terminator: <Id.Op_Semi _> ) ] action: [(C {<warn>} {(DQ <'echo 0 > '> ($ Id.VSub_DollarName '$tdir') </filter>)})] spids: [357 367] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_stack>) ) (C {<warn>} {(DQ <'echo 0 > options/stacktrace'>)}) ] ) (C {<warn>} {(DQ <'echo > trace'>)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike wroteflock>) ) (C {<warn>} {(DQ <'rm '> ($ Id.VSub_DollarName '$flock'))}) ] ) ] ) ) (command.ShFunction name: die body: (command.BraceGroup children: [ (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_At '$@'))}] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ) (command.ShFunction name: edie body: (command.BraceGroup children: [ (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_At '$@'))}] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.Simple words: [{<exec>}] 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>}) ] ) (C {<end>}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: [ (C {<getopts>} {<d> <Id.Lit_Other ':'> <hHlp> <Id.Lit_Other ':'> <L> <Id.Lit_Other ':'> <sv>} {<opt>} ) ] body: (command.DoGroup children: [ (command.Case to_match: {($ Id.VSub_DollarName '$opt')} arms: [ (case_arm pat_list: [{<d>}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_duration) op: assign_op.Equal rhs: {<1>} spids: [518] ) ] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:duration) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTARG')} spids: [522] ) ] ) ] spids: [515 516 525 -1] ) (case_arm pat_list: [{<p>}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_pid) op: assign_op.Equal rhs: {<1>} spids: [531] ) ] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pid) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTARG')} spids: [535] ) ] ) ] spids: [528 529 538 -1] ) (case_arm pat_list: [{<L>}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_tid) op: assign_op.Equal rhs: {<1>} spids: [544] ) ] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tid) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTARG')} spids: [548] ) ] ) ] spids: [541 542 551 -1] ) (case_arm pat_list: [{<H>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_headers) op: assign_op.Equal rhs: {<1>} spids: [557] ) ] ) ] spids: [554 555 560 -1] ) (case_arm pat_list: [{<l>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_list) op: assign_op.Equal rhs: {<1>} spids: [566] ) ] ) ] spids: [563 564 569 -1] ) (case_arm pat_list: [{<s>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_stack) op: assign_op.Equal rhs: {<1>} spids: [575] ) ] ) ] spids: [572 573 578 -1] ) (case_arm pat_list: [{<v>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_view) op: assign_op.Equal rhs: {<1>} spids: [584] ) ] ) ] spids: [581 582 587 -1] ) (case_arm pat_list: [{<h>} {<Id.Lit_QMark '?'>}] action: [(C {<usage>})] spids: [590 593 597 -1] ) ] ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.Unary op_id: Id.Arith_Bang child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_list>) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<shift>} { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$OPTIND')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) } ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.DParen child:(arith_expr.ArithWord w:{($ Id.VSub_Pound '$#')})) (C {<usage>}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tpoint) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [644] ) ] ) (C {<shift>}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child:(arith_expr.ArithWord w:{($ Id.VSub_Pound '$#')})) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_filter) op: assign_op.Equal rhs: {<1>} spids: [664] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [668] ) ] ) ] spids: [651 661] ) ] ) ] spids: [604 615] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.Binary op_id: Id.Arith_Great left: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_pid>) right: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_filter>) ) right: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_tid>) ) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) (C {<die>} {(DQ <'ERROR: use at most one of -p, -L, or filter.'>)}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.Binary op_id: Id.Arith_DAmp left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_duration>) right: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_view>) ) ) (C {<die>} {(DQ <'ERROR: use either -d or -v.'>)}) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child:(arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_pid>)) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_filter) op: assign_op.Equal rhs: {<1>} spids: [745] ) ] ) (command.ForEach iter_name: tid iter_words: [{</proc/> ($ Id.VSub_DollarName '$pid') </task/> <Id.Lit_Star '*'>}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$filter') <' || common_pid == '> (braced_var_sub token: <Id.VSub_Name tid> suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPound arg_word: {<'*'> <Id.Lit_Slash />} ) ) ) } spids: [768] ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name filter> suffix_op: (suffix_op.Slice begin:(arith_expr.ArithWord w:{<Id.Lit_Digits 3>})) ) } spids: [784] ) ] ) ] spids: [728 738] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child:(arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_tid>)) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt_filter) op: assign_op.Equal rhs: {<1>} spids: [809] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filter) op: assign_op.Equal rhs: {(DQ <'common_pid == '> ($ Id.VSub_DollarName '$tid'))} spids: [813] ) ] ) ] spids: [796 806] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.Binary op_id: Id.Arith_DAmp left: (arith_expr.Unary op_id: Id.Arith_Bang child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_view>) ) right: (arith_expr.Unary op_id: Id.Arith_Bang child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_list>) ) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_duration>) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} { (DQ <'Tracing '> ($ Id.VSub_DollarName '$tpoint') <' for '> ($ Id.VSub_DollarName '$duration') <' seconds (buffered)...'> ) } ) ] spids: [840 850] ) ] else_action: [ (C {<echo>} {(DQ <'Tracing '> ($ Id.VSub_DollarName '$tpoint') <'. Ctrl-C to end.'>)}) ] ) ] spids: [821 837] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cd>} {($ Id.VSub_DollarName '$tracing')}) (C {<die>} { (DQ <'ERROR: accessing tracing. Root user? Kernel has FTRACE?\n'> <' debugfs mounted? (mount -t debugfs debugfs /sys/kernel/debug)'> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child:(arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_list>)) terminator: <Id.Op_Semi _> ) ] action: [ (C {<cd>} {<events>}) (command.ForEach iter_name: tp iter_words: [{<Id.Lit_Star '*'> </> <Id.Lit_Star '*'>}] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_f child: {($ Id.VSub_DollarName '$tp')} ) ) (command.ControlFlow token: <Id.ControlFlow_Continue continue> ) ] ) (C {<echo>} { (braced_var_sub token: <Id.VSub_Name tp> suffix_op: (suffix_op.PatSub pat: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\/'>)} replace: {<':'>} replace_mode: Id.Undefined_Tok ) ) } ) ] ) ) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] spids: [901 911] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tdir) op: assign_op.Equal rhs: {<events/> (braced_var_sub token: <Id.VSub_Name tpoint> suffix_op: (suffix_op.PatSub pat: {<':'>} replace: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\/'>)} replace_mode: Id.Undefined_Tok ) ) } spids: [972] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.DBracket expr: (bool_expr.Unary op_id:Id.BoolUnary_e child:{($ Id.VSub_DollarName '$tdir')}) ) (C {<die>} {(DQ <'ERROR: tracepoint '> ($ Id.VSub_DollarName '$tpoint') <' not found. Exiting'>)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child:(arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_view>)) terminator: <Id.Op_Semi _> ) ] action: [ (C {<cat>} {($ Id.VSub_DollarName '$tdir') </format>}) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] spids: [1004 1014] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Unary op_id:Id.BoolUnary_e child:{($ Id.VSub_DollarName '$flock')}) ) (C {<die>} { (DQ <'ERROR: ftrace may be in use by PID '> (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<cat>} {($ Id.VSub_DollarName '$flock')})] ) ) <' '> ($ Id.VSub_DollarName '$flock') ) } ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{<echo>} {($ Id.VSub_Dollar '$$')}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$flock')} ) ] ) (C {<die>} {(DQ <'ERROR: unable to write '> ($ Id.VSub_DollarName '$flock') <.>)}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:wroteflock) op: assign_op.Equal rhs: {<1>} spids: [1072] ) ] ) (command.Simple words: [{<echo>} {<nop>}] redirects: [(redir.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{<current_tracer>})] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child:(arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_filter>)) terminator: <Id.Op_Semi _> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_DollarName '$filter'))}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$tdir') </filter>} ) ] ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] action: [(C {<edie>} {(DQ <'ERROR: setting filter or -p. Exiting.'>)})] spids: [1100 1116] ) ] ) ] spids: [1087 1097] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child:(arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_stack>)) terminator: <Id.Op_Semi _> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [{<echo>} {<1>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<options/stacktrace>} ) ] ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] action: [(C {<edie>} {(DQ <'ERROR: enabling stack traces (-s). Exiting'>)})] spids: [1143 1156] ) ] ) ] spids: [1130 1140] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [{<echo>} {<1>}] redirects: [ (redir.Redir op: <Id.Redir_DGreat '>>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$tdir') </enable>} ) ] ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<edie>} {(DQ <'ERROR: enabling tracepoint '> ($ Id.VSub_DollarName '$tprobe') <'. Exiting.'>)} ) ] spids: [1170 1184] ) ] ) (C {<warn>} {(DQ <'echo > trace'>)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_duration>) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<sleep>} {($ Id.VSub_DollarName '$duration')}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_headers>) ) terminator: <Id.Op_Semi _> ) ] action: [(C {<cat>} {<trace>})] spids: [1225 1235] ) ] else_action: [(C {<grep>} {<-v>} {(SQ <'^#'>)} {<trace>})] ) ] spids: [1207 1217] ) ] else_action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.VarRef token:<Id.Lit_ArithVarLike opt_headers>) ) (C {<cat>} {<trace>}) ] ) (C {<cat>} {<trace_pipe>}) ] ) (C {<end>}) ] )