(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:num_files) op: assign_op.Equal rhs: {(10)} spids: [125] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:site) op: assign_op.Equal rhs: {(DQ (www.pixelbeat.org))} spids: [128] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:author) op: assign_op.Equal rhs: {(DQ ('P@draigBrady.com (P\xc3\xa1draig Brady)'))} spids: [133] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:suggested_update_freq) op: assign_op.Equal rhs: {(1440)} spids: [138] ) ] ) (C {(Id.Lit_Other ':')} { (braced_var_sub token: (Token id:Id.VSub_Name val:TITLE span_id:148) suffix_op: (suffix_op.Unary op_id:Id.VTest_Equals arg_word:{($ Id.VSub_DollarName '$site')}) ) } ) (C {(Id.Lit_Other ':')} { (braced_var_sub token: (Token id:Id.VSub_Name val:DESCRIPTION span_id:156) suffix_op: (suffix_op.Unary op_id: Id.VTest_Equals arg_word: {(DQ ('latest from ') ($ Id.VSub_DollarName '$site'))} ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:include_re) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: '(^|/)[.].+|(^|/)[^.]+$|[.](c|cpp|py|sh|rc|tips|fortune|html)$' span_id: 170 ) ) } spids: [168] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:exclude_re) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: '(\\.git/|priv/|tmp/|.htaccess|xvpics|timeline\\.html|modified\\.html|head\\.html|header\\.html|footer\\.html|footer-home\\.html|adds\\.html|last\\.html|fslint/(NEWS\\.html|md5sum)|README)' span_id: 179 ) ) } spids: [177] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:default_files) op: assign_op.Equal rhs: {(DQ ('index.html index.shtml index.php'))} spids: [186] ) ] ) (command.ForEach iter_name: file iter_words: [{($ Id.VSub_DollarName '$default_files')}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:replace_default_files) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$replace_default_files') ('; s/') (Id.Lit_Other '\\') ('(.*') (Id.Lit_Other '\\') (')') ($ Id.VSub_DollarName '$file') (Id.Lit_Other '$') (/) (Id.Lit_Other '\\') ('1/;t') ) } spids: [208] ) ] ) ] ) ) (C {(echo)} { (SQ (Token id:Id.Lit_Chars val:'<?xml version="1.0" encoding="utf-8"?>\n' span_id:229) (Token id: Id.Lit_Chars val: '<?xml-stylesheet type="text/css" href="rss2.css" ?>\n' span_id: 230 ) (Token id:Id.Lit_Chars val:'\n' span_id:231) (Token id:Id.Lit_Chars val:'<rss version="2.0">\n' span_id:232) (Token id:Id.Lit_Chars val:'<channel>' span_id:233) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:time) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:238) command_list: (command.CommandList children:[(C {(date)} {(--rfc-2822)})]) ) } spids: [237] ) ] ) (C {(echo)} { (DQ ('\n') ('<title>') ($ Id.VSub_DollarName '$TITLE') ('</title>\n') ('<ttl>') ($ Id.VSub_DollarName '$suggested_update_freq') ('</ttl>\n') ('<link>http://') ($ Id.VSub_DollarName '$site') (/) ($ Id.VSub_Number '$1') ('</link>\n') ('<generator>http://www.pixelbeat.org/scripts/bashfeed</generator>\n') ('<description>') ($ Id.VSub_DollarName '$DESCRIPTION') ('</description>\n') ('<managingEditor>') ($ Id.VSub_DollarName '$author') ('</managingEditor>\n') ('<lastBuildDate>') ($ Id.VSub_DollarName '$time') ('</lastBuildDate>\n') ('<language>') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:273) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {($ Id.VSub_DollarName '$LANG')}) (C {(sed)} {(SQ (Token id:Id.Lit_Chars val:'s/\\(..\\)_.*/\\1/' span_id:291))}) ] negated: F ) ] ) ) ('</language>\n') ) } ) (command.ShFunction name: xml_unescaped body: (command.BraceGroup children: [ (command.Sentence child: (command.Pipeline children: [ (C {(sed)} { (SQ (Token id: Id.Lit_Chars val: 's/&//g; s/&[lg]t;//g; s/"//g' span_id: 307 ) ) } ) (C {(grep)} {(-q)} {(DQ ('[&<>]'))}) ] negated: F ) terminator: (Token id:Id.Op_Semi val:';' span_id:319) ) ] ) ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Pipeline children: [ (C {(find)} {($ Id.VSub_Number '$1')} {(-type)} {(f)} {(-printf)} {(DQ ('%p') (Id.Lit_Other '\\') ('t%T@') (Id.Lit_Other '\\') (n))} ) (C {(sed)} {(SQ (Token id:Id.Lit_Chars val:'s/^\\.\\///' span_id:347))}) (C {(sort)} {(-k2) (Id.Lit_Comma ',') (2nr)}) (C {(cut)} {(-f1)}) (C {(grep)} {(-E)} {(DQ ($ Id.VSub_DollarName '$include_re'))}) (C {(grep)} {(-Ev)} {(DQ ($ Id.VSub_DollarName '$exclude_re'))}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:389) cond: [ (command.Sentence child: (C {(read)} {(file)}) terminator: (Token id:Id.Op_Semi val:';' span_id:394) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(head)} {(DQ ($ Id.VSub_DollarName '$file'))}) (C {(grep)} {(-Fiq)} { (SQ (Token id: Id.Lit_Chars val: '<!--Exclude from bashfeed-->' span_id: 416 ) ) } ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:418) ) ] action: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$file'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:i) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.VarRef token: (Token id: Id.Lit_ArithVarLike val: i span_id: 432 ) ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [430] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$i')} {(-eq)} {($ Id.VSub_DollarName '$num_files')} {(Id.Lit_RBracket ']')} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:451) ) ] ) ] spids: [399 420] ) ] ) ] ) ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:460) cond: [ (command.Sentence child: (C {(read)} {(file)}) terminator: (Token id:Id.Op_Semi val:';' span_id:465) ) ] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pubDate) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:471) command_list: (command.CommandList children: [ (C {(date)} {(--reference) (Id.Lit_Equals '=') (DQ ($ Id.VSub_DollarName '$file')) } {(--rfc-2822)} ) ] ) ) } spids: [470] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:force_update) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:487) command_list: (command.CommandList children: [ (C {(date)} {(--reference) (Id.Lit_Equals '=') (DQ ($ Id.VSub_DollarName '$file')) } {(DQ ('+%s'))} ) ] ) ) } spids: [486] ) ] ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:title) op: assign_op.Equal rhs: {(DQ )} spids: [504] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:507) ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:keywords) op: assign_op.Equal rhs: {(DQ )} spids: [509] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:512) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:description) op: assign_op.Equal rhs: {(DQ )} spids: [514] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$file'))}) (C {(grep)} {(-Eq)} { (SQ (Token id: Id.Lit_Chars val: '\\.(html|shtml|php)$' span_id: 534 ) ) } ) ] negated: F ) terminator: (Token id:Id.Op_Semi val:';' span_id:536) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:title) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:542) command_list: (command.CommandList children: [ (command.Simple words: [ {(sed)} {(-n)} { (SQ (Token id: Id.Lit_Chars val: 's/.*<title>\\(.*\\)<\\/title>.*/\\1/ip;T;q' span_id: 558 ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:561) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$file'))} ) ] ) ] ) ) } spids: [541] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:keywords) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:570) command_list: (command.CommandList children: [ (command.Simple words: [ {(sed)} {(-n)} { (SQ (Token id: Id.Lit_Chars val: 's/.*<META.*NAME="keywords".*CONTENT="\\(.*\\)".*/\\1/ip;T;q' span_id: 584 ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:587) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$file'))} ) ] ) ] ) ) } spids: [569] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:description) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:596) command_list: (command.CommandList children: [ (command.Simple words: [ {(sed)} {(-n)} { (SQ (Token id: Id.Lit_Chars val: 's/.*<META.*NAME="description".*CONTENT="\\(.*\\)".*/\\1/ip;T;q' span_id: 610 ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:613) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$file'))} ) ] ) ] ) ) } spids: [595] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:page_author) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:622) command_list: (command.CommandList children: [ (command.Simple words: [ {(sed)} {(-n)} { (SQ (Token id: Id.Lit_Chars val: 's/.*<META.*NAME="author".*CONTENT="\\(.*\\)".*/\\1/ip;T;q' span_id: 636 ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:639) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$file'))} ) ] ) ] ) ) } spids: [621] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:extracted_text) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$title') (' ') ($ Id.VSub_DollarName '$keywords') (' ') ($ Id.VSub_DollarName '$description') (Id.Lit_Other '$') (' ') ($ Id.VSub_DollarName '$page_author') ) } spids: [647] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$extracted_text'))}) (C {(xml_unescaped)}) ] negated: F ) terminator: (Token id:Id.Op_Semi val:';' span_id:671) ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ('Error: HTML metadata in ') ($ Id.VSub_DollarName '$file') (' will not produce a valid XML feed') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:684) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:688) arg_word: {(1)} ) ] spids: [660 673] ) ] ) ] spids: [519 538] ) (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-x)} {(DQ ($ Id.VSub_DollarName '$file'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:707) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:description) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:716) command_list: (command.CommandList children: [ (C {(sed)} {(-n)} { (SQ (Token id: Id.Lit_Chars val: '3s/# \\(.*\\)/\\1/p' span_id: 730 ) ) } {(DQ ($ Id.VSub_DollarName '$file'))} ) ] ) ) } spids: [715] ) ] ) ] spids: [696 709] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:file) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:743) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$file'))}) (C {(sed)} {(DQ ($ Id.VSub_DollarName '$replace_default_files'))} ) ] negated: F ) ] ) ) } spids: [742] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$title'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:title) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$file'))} spids: [774] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tags) op: assign_op.Equal rhs: {(DQ )} spids: [780] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-z)} {(DQ ($ Id.VSub_DollarName '$keywords'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:798) ) ] action: [ (command.ForEach iter_name: keyword iter_words: [{($ Id.VSub_DollarName '$keywords')}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tags) op: assign_op.Equal rhs: { (command_sub left_token: (Token id: Id.Left_Backtick val: '`' span_id: 816 ) command_list: (command.CommandList children: [ (C {(echo)} {(-ne)} { (DQ ($ Id.VSub_DollarName '$tags') ('<category>') ($ Id.VSub_DollarName '$keyword') ('</category>') (Id.Lit_Other '\\') ('n ') ) } ) ] ) ) } spids: [815] ) ] ) ] ) ) ] spids: [785 800] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$page_author'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:851) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$page_author'))} {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$author'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:871) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:page_author) op: assign_op.Equal rhs: {(DQ )} spids: [876] ) ] ) ] spids: [856 873] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:page_author) op: assign_op.Equal rhs: { (command_sub left_token: (Token id: Id.Left_Backtick val: '`' span_id: 885 ) command_list: (command.CommandList children: [ (C {(echo)} {(-ne)} { (DQ ('<author>') ($ Id.VSub_DollarName '$page_author') ('</author>') (Id.Lit_Other '\\') ('n ') ) } ) ] ) ) } spids: [884] ) ] ) ] ) ] spids: [842 853] ) ] ) (C {(echo)} { (DQ ('\n') ('<item>\n') (' <title>') ($ Id.VSub_DollarName '$title') ('</title>\n') (' <guid>http://') ($ Id.VSub_DollarName '$site') (/) ($ Id.VSub_DollarName '$file') ('</guid>\n') (' <pubDate>') ($ Id.VSub_DollarName '$pubDate') ('</pubDate>\n') (' <link>http://') ($ Id.VSub_DollarName '$site') (/) ($ Id.VSub_DollarName '$file') ('#') ($ Id.VSub_DollarName '$force_update') ('</link>\n') (' ') ($ Id.VSub_DollarName '$page_author') ($ Id.VSub_DollarName '$tags') ('<description><![CDATA[') ($ Id.VSub_DollarName '$description') ('<!--') ($ Id.VSub_DollarName '$force_update') ('-->]]></description>\n') ('</item>\n') ) } ) ] ) ) ] negated: F ) (C {(echo)} { (SQ (Token id:Id.Lit_Chars val:'</channel>\n' span_id:950) (Token id:Id.Lit_Chars val:'</rss>' span_id:951) ) } ) ] ) ] )