(CommandList children: [ (C {(.)} {(./martin.sh)}) (Sentence child:(C {(get)} {(DQ (/))} {(root)}) terminator:<Op_Semi ';'>) (FuncDef name: root body: (BraceGroup children: [ (C {(header)} {(DQ (Content-Type))} {(DQ ('text/html; charset=utf-8'))}) (SimpleCommand words: [{(cat)}] redirects: [ (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ('<!DOCTYPE html>\n') ('<html>\n') (' <head>\n') (' <meta charset=') (Right_DoubleQuote '"') (utf-8) (Right_DoubleQuote '"') ('>\n') (' <title>hello world from ') ($ VSub_Name '$PATH_INFO') ('</title>\n') (' </head>\n') (' <body>\n') (' <img src=') (Right_DoubleQuote '"') (/DeanMartin.jpg) (Right_DoubleQuote '"') ('>\n') (' <h1>hello world from ') ($ VSub_Name '$PATH_INFO') ('</h1>\n') (' <a href=') (Right_DoubleQuote '"') (/ps) (Right_DoubleQuote '"') ('>processes</a>\n') (' <a href=') (Right_DoubleQuote '"') (/redirect) (Right_DoubleQuote '"') ('>redirect</a>\n') (' </body>\n') ('</html>\n') ) } do_expansion: True here_end: EOT was_filled: True spids: [39] ) ] ) ] spids: [23] ) spids: [18 22] ) (Sentence child:(C {(get)} {(DQ (/ps))} {(ps_handler)}) terminator:<Op_Semi ';'>) (FuncDef name: ps_handler body: (BraceGroup children: [(C {(header)} {(DQ (Content-Type))} {(DQ (text/plain))}) (C {(ps)})] spids: [93] ) spids: [88 92] ) (Sentence child: (C {(get)} {(DQ (/DeanMartin.jpg))} {(dean_handler)}) terminator: <Op_Semi ';'> ) (FuncDef name: dean_handler body: (BraceGroup children: [ (C {(header)} {(DQ (Content-Type))} {(DQ (image/jpeg))}) (C {(cat)} {(DQ (DeanMartin.jpg))}) ] spids: [126] ) spids: [121 125] ) (Sentence child:(C {(get)} {(DQ (/redirect))} {(redirect_handler)}) terminator:<Op_Semi ';'>) (FuncDef name: redirect_handler body: (BraceGroup children: [ (C {(status)} {(302)}) (C {(header)} {(DQ (Location))} {(DQ ('http://jackjs.org/'))}) ] spids: [163] ) spids: [158 162] ) (C {(martin)} {($ VSub_Name '$PORT')}) ] )