(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tracing) op: Equal rhs: {(/sys/kernel/debug/tracing)} spids: [157] ) ] spids: [157] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:flock) op: Equal rhs: {(/var/tmp/.ftrace-lock)} spids: [160] ) ] spids: [160] ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:opt_duration) op:Equal rhs:{(0)} spids:[163])] spids: [163] ) terminator: <Op_Semi ";"> ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:duration) op:Equal rhs:{(SQ )} spids:[167])] spids: [167] ) terminator: <Op_Semi ";"> ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:opt_pid) op:Equal rhs:{(0)} spids:[170])] spids: [170] ) terminator: <Op_Semi ";"> ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:pid) op:Equal rhs:{(SQ )} spids:[174])] spids: [174] ) terminator: <Op_Semi ";"> ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:opt_tid) op:Equal rhs:{(0)} spids:[177])] spids: [177] ) terminator: <Op_Semi ";"> ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:tid) op:Equal rhs:{(SQ )} spids:[181])] spids: [181] ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:pidtext) op:Equal rhs:{(SQ )} spids:[183])] spids: [183] ) terminator: <Op_Semi ";"> ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:opt_headers) op:Equal rhs:{(0)} spids:[186])] spids: [186] ) terminator: <Op_Semi ";"> ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:opt_proc) op:Equal rhs:{(0)} spids:[190])] spids: [190] ) terminator: <Op_Semi ";"> ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:opt_time) op:Equal rhs:{(0)} spids:[194])] spids: [194] ) terminator: <Op_Semi ";"> ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:opt_cpu) op:Equal rhs:{(0)} spids:[198])] spids: [198] ) (C {(trap)} {(SQ <":">)} {(INT)} {(QUIT)} {(TERM)} {(PIPE)} {(HUP)}) (FuncDef name: usage body: (BraceGroup children: [ (SimpleCommand words: [{(cat)}] redirects: [ (HereDoc op_id: Redir_DLessDash fd: -1 body: { (DQ ( "USAGE: funcslower [-aChHPt] [-p PID] [-L TID] [-d secs] funcstring latency_us\n" ) (" -a # all info (same as -HPt)\n") (" -C # measure on-CPU time only\n") (" -d seconds # trace duration, and use buffers\n") (" -h # this usage message\n") (" -H # include column headers\n") (" -p PID # trace when this pid is on-CPU\n") (" -L TID # trace when this thread is on-CPU\n") (" -P # show process names & PIDs\n") (" -t # show timestamps\n") (" eg,\n") (" funcslower vfs_read 10000 # trace vfs_read() slower than 10 ms\n") ("\n") ("See the man page and example file for more info.\n") ) } do_expansion: True here_end: END was_filled: True spids: [230] ) (Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[233]) ] ) (C {(exit)}) ] spids: [225] ) spids: [221 224] ) (FuncDef name: warn body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children:[(C {(eval)} {(DQ ($ VSub_At "$@"))})] negated:True) terminator: <Op_Semi ";"> ) ] action: [ (SimpleCommand words: [ {(echo)} { (DQ ("WARNING: command failed ") (EscapedLiteralPart token: <Lit_EscapedChar "\\\""> ) ($ VSub_At "$@") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) ) } ] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[279])] ) ] spids: [-1 274] ) ] spids: [-1 290] ) ] spids: [260] ) spids: [256 259] ) (FuncDef name: end body: (BraceGroup children: [ (SimpleCommand words: [{(echo)}] redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[308])] ) (SimpleCommand words: [{(echo)} {(DQ ("Ending tracing..."))}] redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[318])] ) (C {(cd)} {($ VSub_Name "$tracing")}) (AndOr children: [ (DParen child:(ArithVarRef name:opt_time)) (C {(warn)} {(DQ ("echo nofuncgraph-abstime > trace_options"))}) ] op_id: Op_DAmp ) (AndOr children: [ (DParen child:(ArithVarRef name:opt_proc)) (C {(warn)} {(DQ ("echo nofuncgraph-proc > trace_options"))}) ] op_id: Op_DAmp ) (AndOr children: [ (DParen child:(ArithVarRef name:opt_cpu)) (C {(warn)} {(DQ ("echo sleep-time > trace_options"))}) ] op_id: Op_DAmp ) (C {(warn)} {(DQ ("echo nop > current_tracer"))}) (AndOr children: [ (DParen child:(ArithVarRef name:opt_pid)) (C {(warn)} {(DQ ("echo > set_ftrace_pid"))}) ] op_id: Op_DAmp ) (C {(warn)} {(DQ ("echo > set_ftrace_filter"))}) (C {(warn)} {(DQ ("echo > set_graph_function"))}) (C {(warn)} {(DQ ("echo 0 > tracing_thresh"))}) (C {(warn)} {(DQ ("echo > trace"))}) (AndOr children: [ (DParen child:(ArithVarRef name:wroteflock)) (C {(warn)} {(DQ ("rm ") ($ VSub_Name "$flock"))}) ] op_id: Op_DAmp ) ] spids: [299] ) spids: [295 298] ) (FuncDef name: die body: (BraceGroup children: [ (SimpleCommand words: [{(echo)} {(DQ ($ VSub_At "$@"))}] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[457])] ) (C {(exit)} {(1)}) ] spids: [452] ) spids: [448 451] ) (FuncDef name: edie body: (BraceGroup children: [ (SimpleCommand words: [{(echo)} {(DQ ($ VSub_At "$@"))}] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[485])] ) (SimpleCommand words: [{(exec)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[495]) (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[498]) ] ) (C {(end)}) (C {(exit)} {(1)}) ] spids: [476] ) spids: [472 475] ) (While cond: [ (C {(getopts)} {(aCd) (Lit_Other ":") (hHp) (Lit_Other ":") (L) (Lit_Other ":") (Pt)} {(opt)}) ] body: (DoGroup children: [ (Case to_match: {($ VSub_Name "$opt")} arms: [ (case_arm pat_list: [{(a)}] action: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_headers) op: Equal rhs: {(1)} spids: [542] ) ] spids: [542] ) terminator: <Op_Semi ";"> ) (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_proc) op: Equal rhs: {(1)} spids: [546] ) ] spids: [546] ) terminator: <Op_Semi ";"> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_time) op: Equal rhs: {(1)} spids: [550] ) ] spids: [550] ) ] spids: [539 540 553 -1] ) (case_arm pat_list: [{(C)}] action: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_cpu) op: Equal rhs: {(1)} spids: [559] ) ] spids: [559] ) terminator: <Op_Semi ";"> ) ] spids: [556 557 563 -1] ) (case_arm pat_list: [{(d)}] action: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_duration) op: Equal rhs: {(1)} spids: [569] ) ] spids: [569] ) terminator: <Op_Semi ";"> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:duration) op: Equal rhs: {($ VSub_Name "$OPTARG")} spids: [573] ) ] spids: [573] ) ] spids: [566 567 576 -1] ) (case_arm pat_list: [{(p)}] action: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_pid) op: Equal rhs: {(1)} spids: [582] ) ] spids: [582] ) terminator: <Op_Semi ";"> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:pid) op: Equal rhs: {($ VSub_Name "$OPTARG")} spids: [586] ) ] spids: [586] ) ] spids: [579 580 589 -1] ) (case_arm pat_list: [{(L)}] action: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_tid) op: Equal rhs: {(1)} spids: [595] ) ] spids: [595] ) terminator: <Op_Semi ";"> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tid) op: Equal rhs: {($ VSub_Name "$OPTARG")} spids: [599] ) ] spids: [599] ) ] spids: [592 593 602 -1] ) (case_arm pat_list: [{(H)}] action: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_headers) op: Equal rhs: {(1)} spids: [608] ) ] spids: [608] ) terminator: <Op_Semi ";"> ) ] spids: [605 606 612 -1] ) (case_arm pat_list: [{(P)}] action: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_proc) op: Equal rhs: {(1)} spids: [618] ) ] spids: [618] ) terminator: <Op_Semi ";"> ) ] spids: [615 616 622 -1] ) (case_arm pat_list: [{(t)}] action: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:opt_time) op: Equal rhs: {(1)} spids: [628] ) ] spids: [628] ) terminator: <Op_Semi ";"> ) ] spids: [625 626 632 -1] ) (case_arm pat_list: [{(h)} {(Lit_Other "?")}] action: [(C {(usage)})] spids: [635 638 642 -1] ) ] spids: [532 536 645] ) ] spids: [529 647] ) ) (C {(shift)} { (ArithSubPart anode: (ArithBinary op_id: Arith_Minus left: (ArithWord w:{($ VSub_Name "$OPTIND")}) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [651 660] ) } ) (AndOr children: [ (DParen child: (ArithBinary op_id: Arith_Less left: (ArithWord w:{($ VSub_Pound "$#")}) right: (ArithWord w:{(Lit_Digits 2)}) ) ) (C {(usage)}) ] op_id: Op_DAmp ) (AndOr children: [ (DParen child: (ArithBinary op_id: Arith_DAmp left: (ArithVarRef name:opt_pid) right: (ArithVarRef name:opt_tid) ) ) (C {(edie)} {(DQ ("ERROR: You can use -p or -L but not both."))}) ] op_id: Op_DAmp ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:funcs) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [700] ) ] spids: [700] ) (C {(shift)}) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:thresh) op:Equal rhs:{($ VSub_Number "$1")} spids:[707])] spids: [707] ) (AndOr children: [ (DParen child:(ArithVarRef name:opt_pid)) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:pidtext) op: Equal rhs: {(DQ (" for PID ") ($ VSub_Name "$pid"))} spids: [719] ) ] spids: [719] ) ] op_id: Op_DAmp ) (AndOr children: [ (DParen child:(ArithVarRef name:opt_tid)) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:pidtext) op: Equal rhs: {(DQ (" for TID ") ($ VSub_Name "$tid"))} spids: [734] ) ] spids: [734] ) ] op_id: Op_DAmp ) (C {(printf)} { (DQ ("Tracing ") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) ($ VSub_Name "$funcs") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) ($ VSub_Name "$pidtext") (" slower than ") ($ VSub_Name "$thresh") (" us") ) } ) (If arms: [ (if_arm cond: [ (Sentence child: (DParen child:(ArithVarRef name:opt_duration)) terminator: <Op_Semi ";"> ) ] action: [(C {(echo)} {(DQ (" for ") ($ VSub_Name "$duration") (" seconds..."))})] spids: [-1 763] ) ] else_action: [(C {(echo)} {(DQ ("... Ctrl-C to end."))})] spids: [774 783] ) (If arms: [ (if_arm cond: [ (Sentence child: (DParen child:(ArithVarRef name:opt_duration)) terminator: <Op_Semi ";"> ) ] action: [ (AndOr children: [ (DBracket expr:(BoolUnary op_id:BoolUnary_x child:{(/usr/bin/mawk)})) (AndOr children: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:awk) op:Equal rhs:{(mawk)} spids:[812])] spids: [812] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:awk) op:Equal rhs:{(awk)} spids:[817])] spids: [817] ) ] op_id: Op_DPipe ) ] op_id: Op_DAmp ) ] spids: [-1 799] ) ] else_action: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_x child:{(/usr/bin/gawk)})) terminator: <Op_Semi ";"> ) ] action: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:awk) op:Equal rhs:{(gawk)} spids:[841])] spids: [841] ) ] spids: [-1 838] ) (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_x child:{(/usr/bin/mawk)})) terminator: <Op_Semi ";"> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:awk) op: Equal rhs: {(DQ ("mawk -W interactive"))} spids: [859] ) ] spids: [859] ) ] spids: [845 856] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:awk) op:Equal rhs:{(awk)} spids:[868])] spids: [868] ) ] spids: [865 872] ) ] spids: [820 874] ) (AndOr children: [ (C {(cd)} {($ VSub_Name "$tracing")}) (C {(die)} { (DQ ("ERROR: accessing tracing. Root user? Kernel has FTRACE?\n") (" debugfs mounted? (mount -t debugfs debugfs /sys/kernel/debug)") ) } ) ] op_id: Op_DPipe ) (AndOr children: [ (DBracket expr:(BoolUnary op_id:BoolUnary_e child:{($ VSub_Name "$flock")})) (C {(die)} { (DQ ("ERROR: ftrace may be in use by PID ") (CommandSubPart command_list: (CommandList children:[(C {(cat)} {($ VSub_Name "$flock")})]) left_token: <Left_CommandSub "$("> spids: [911 915] ) (" ") ($ VSub_Name "$flock") ) } ) ] op_id: Op_DAmp ) (AndOr children: [ (SimpleCommand words: [{(echo)} {($ VSub_Dollar "$$")}] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{($ VSub_Name "$flock")} spids:[924])] ) (C {(die)} {(DQ ("ERROR: unable to write ") ($ VSub_Name "$flock") (.))}) ] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:wroteflock) op:Equal rhs:{(1)} spids:[938])] spids: [938] ) (C {(sysctl)} {(-q)} {(kernel.ftrace_enabled) (Lit_Other "=") (1)}) (SimpleCommand words: [{(read)} {(mode)}] redirects: [(Redir op_id:Redir_Less fd:-1 arg_word:{(current_tracer)} spids:[960])] ) (AndOr children: [ (DBracket expr: (BoolBinary op_id: BoolBinary_GlobNEqual left: {(DQ ($ VSub_Name "$mode"))} right: {(DQ (nop))} ) ) (C {(edie)} {(DQ ("ERROR: ftrace active (current_tracer=") ($ VSub_Name "$mode") (")"))}) ] op_id: Op_DAmp ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (SimpleCommand words: [{(echo)} {($ VSub_Name "$thresh")}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(tracing_thresh)} spids: [996] ) ] ) ] negated: True ) terminator: <Op_Semi ";"> ) ] action: [ (C {(edie)} {(DQ ("ERROR: setting tracing_thresh to ") ($ VSub_Name "$thresh") (". Exiting."))} ) ] spids: [-1 1001] ) ] spids: [-1 1012] ) (If arms: [ (if_arm cond: [(Sentence child:(DParen child:(ArithVarRef name:opt_pid)) terminator:<Op_Semi ";">)] action: [ (SimpleCommand words: [{(echo)} {(SQ )}] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(set_ftrace_pid)} spids:[1032])] ) (ForEach iter_name: tid iter_words: [{(/proc/) ($ VSub_Name "$pid") (/task/) (Lit_Other "*")}] do_arg_iter: False body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (SimpleCommand words: [ {(echo)} { (BracedVarSub token: <VSub_Name tid> suffix_op: (StringUnary op_id: VOp1_DPound arg_word: {("*") (Lit_Slash /)} ) spids: [1062 1067] ) } ] redirects: [ (Redir op_id: Redir_DGreat fd: -1 arg_word: {(set_ftrace_pid)} spids: [1069] ) ] ) ] negated: True ) terminator: <Op_Semi ";"> ) ] action: [ (C {(edie)} { (DQ ("ERROR: setting -p ") ($ VSub_Name "$pid") (" (PID exist?). Exiting.") ) } ) ] spids: [-1 1074] ) ] spids: [-1 1086] ) ] spids: [1053 1089] ) spids: [1046 1051] ) ] spids: [-1 1024] ) ] spids: [-1 1091] ) (If arms: [ (if_arm cond: [(Sentence child:(DParen child:(ArithVarRef name:opt_tid)) terminator:<Op_Semi ";">)] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (SimpleCommand words: [{(echo)} {($ VSub_Name "$tid")}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(set_ftrace_pid)} spids: [1114] ) ] ) ] negated: True ) terminator: <Op_Semi ";"> ) ] action: [ (C {(edie)} {(DQ ("ERROR: setting -L ") ($ VSub_Name "$tid") (" (TID exist?). Exiting."))} ) ] spids: [-1 1119] ) ] spids: [-1 1131] ) ] spids: [-1 1103] ) ] spids: [-1 1133] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (SimpleCommand words: [{(echo)} {(DQ ($ VSub_Name "$funcs"))}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(set_ftrace_filter)} spids: [1145] ) ] ) ] negated: True ) terminator: <Op_Semi ";"> ) ] action: [ (C {(edie)} { (DQ ("ERROR: enabling ") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) ($ VSub_Name "$funcs") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (" filter. Function exist? Exiting.") ) } ) ] spids: [-1 1150] ) ] spids: [-1 1163] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (SimpleCommand words: [{(echo)} {(DQ ($ VSub_Name "$funcs"))}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(set_graph_function)} spids: [1175] ) ] ) ] negated: True ) terminator: <Op_Semi ";"> ) ] action: [ (C {(edie)} { (DQ ("ERROR: enabling ") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) ($ VSub_Name "$funcs") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (" graph. Exiting.") ) } ) ] spids: [-1 1180] ) ] spids: [-1 1193] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (SimpleCommand words: [{(echo)} {(function_graph)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(current_tracer)} spids: [1203] ) ] ) ] negated: True ) terminator: <Op_Semi ";"> ) ] action: [ (C {(edie)} { (DQ ("ERROR: setting current_tracer to ") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (function_graph) (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (". Exiting.") ) } ) ] spids: [-1 1208] ) ] spids: [-1 1221] ) (If arms: [ (if_arm cond: [(Sentence child:(DParen child:(ArithVarRef name:opt_cpu)) terminator:<Op_Semi ";">)] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (SimpleCommand words: [{(echo)} {(nosleep-time)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(trace_options)} spids: [1244] ) ] ) ] negated: True ) terminator: <Op_Semi ";"> ) ] action: [(C {(edie)} {(DQ ("ERROR: setting -C (nosleep-time). Exiting."))})] spids: [-1 1249] ) ] spids: [-1 1259] ) ] spids: [-1 1233] ) ] spids: [-1 1261] ) (If arms: [ (if_arm cond: [(Sentence child:(DParen child:(ArithVarRef name:opt_time)) terminator:<Op_Semi ";">)] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (SimpleCommand words: [{(echo)} {(funcgraph-abstime)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(trace_options)} spids: [1287] ) ] ) ] negated: True ) terminator: <Op_Semi ";"> ) ] action: [(C {(edie)} {(DQ ("ERROR: setting -t (funcgraph-abstime). Exiting."))})] spids: [-1 1292] ) ] spids: [-1 1302] ) ] spids: [-1 1276] ) ] spids: [-1 1304] ) (If arms: [ (if_arm cond: [(Sentence child:(DParen child:(ArithVarRef name:opt_proc)) terminator:<Op_Semi ";">)] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (SimpleCommand words: [{(echo)} {(funcgraph-proc)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(trace_options)} spids: [1327] ) ] ) ] negated: True ) terminator: <Op_Semi ";"> ) ] action: [(C {(edie)} {(DQ ("ERROR: setting -P (funcgraph-proc). Exiting."))})] spids: [-1 1332] ) ] spids: [-1 1342] ) ] spids: [-1 1316] ) ] spids: [-1 1344] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:cat) op:Equal rhs:{(cat)} spids:[1350])] spids: [1350] ) (If arms: [ (if_arm cond: [(Sentence child:(DParen child:(ArithVarRef name:opt_proc)) terminator:<Op_Semi ";">)] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:cat) op: Equal rhs: {($ VSub_Name "$awk") (SQ <" \"/(^ ---|^$)/ || \\$3 == \\\"=>\\\" { next } { print \\$0 }\"">) } spids: [1386] ) ] spids: [1386] ) ] spids: [-1 1363] ) ] spids: [-1 1392] ) (C {(warn)} {(DQ ("echo > trace"))}) (If arms: [ (if_arm cond: [ (Sentence child: (DParen child:(ArithVarRef name:opt_duration)) terminator: <Op_Semi ";"> ) ] action: [ (C {(sleep)} {($ VSub_Name "$duration")}) (If arms: [ (if_arm cond: [ (Sentence child: (DParen child:(ArithVarRef name:opt_headers)) terminator: <Op_Semi ";"> ) ] action: [(C {($ VSub_Name "$cat")} {(trace)})] spids: [-1 1432] ) ] else_action: [ (Pipeline children: [(C {($ VSub_Name "$cat")} {(trace)}) (C {(grep)} {(-v)} {(SQ <"^#">)})] negated: False ) ] spids: [1440 1458] ) ] spids: [-1 1414] ) ] else_action: [ (AndOr children: [(DParen child:(ArithVarRef name:opt_headers)) (C {(cat)} {(trace)})] op_id: Op_DAmp ) (C {(eval)} {($ VSub_Name "$cat")} {(trace_pipe)}) ] spids: [1460 1487] ) (C {(end)}) ] )