(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ádraig 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_Colon ':'>} { (braced_var_sub token: <Id.VSub_Name TITLE> suffix_op: (suffix_op.Unary tok: <Id.VTest_Equals '='> arg_word: {($ Id.VSub_DollarName '$site')} ) ) } ) (C {<Id.Lit_Colon ':'>} { (braced_var_sub token: <Id.VSub_Name DESCRIPTION> suffix_op: (suffix_op.Unary tok: <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 <'(^|/)[.].+|(^|/)[^.]+$|[.](c|cpp|py|sh|rc|tips|fortune|html)$'>)} spids: [168] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:exclude_re) op: assign_op.Equal rhs: { (SQ < '(\\.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)' > ) } 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_names: [file] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName '$default_files')}]) 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_BadBackslash '\\'> <'(.*'> <Id.Lit_BadBackslash '\\'> <')'> ($ Id.VSub_DollarName '$file') <Id.Lit_Dollar '$'> <'/'> <Id.Lit_BadBackslash '\\'> <'1/;t'> ) } spids: [208] ) ] ) ] ) ) (C {<echo>} { (SQ <'<?xml version="1.0" encoding="utf-8"?>\n'> <'<?xml-stylesheet type="text/css" href="rss2.css" ?>\n'> <'\n'> <'<rss version="2.0">\n'> <'<channel>'> ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:time) op: assign_op.Equal rhs: {(command_sub left_token:<Id.Left_Backtick '`'> child:(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: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<echo>} {($ Id.VSub_DollarName '$LANG')}) (C {<sed>} {(SQ <'s/\\(..\\)_.*/\\1/'>)}) ] negated: F ) ) <'</language>\n'> ) } ) (command.ShFunction name: xml_unescaped body: (BraceGroup children: [ (command.Sentence child: (command.Pipeline children: [ (C {<sed>} {(SQ <'s/&//g; s/&[lg]t;//g; s/"//g'>)}) (C {<grep>} {<-q>} {(DQ <'[&<>]'>)}) ] negated: F ) terminator: <Id.Op_Semi _> ) ] ) ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Pipeline children: [ (C {<find>} {($ Id.VSub_Number '$1')} {<-type>} {<f>} {<-printf>} {(DQ <'%p'> <Id.Lit_BadBackslash '\\'> <'t%T@'> <Id.Lit_BadBackslash '\\'> <n>)} ) (C {<sed>} {(SQ <'s/^\\.\\///'>)}) (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: <Id.KW_While while> cond: (condition.Shell commands: [(command.Sentence child:(C {<read>} {<file>}) terminator:<Id.Op_Semi _>)] ) body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<head>} {(DQ ($ Id.VSub_DollarName '$file'))}) (C {<grep>} {<-Fiq>} {(SQ <'<!--Exclude from bashfeed-->'>)}) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) 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: <Id.Lit_ArithVarLike i> right: {<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: <Id.ControlFlow_Break break> ) ] ) ] spids: [399 420] ) ] ) ] ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [(command.Sentence child:(C {<read>} {<file>}) terminator:<Id.Op_Semi _>)] ) 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: <Id.Left_Backtick '`'> child: (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: <Id.Left_Backtick '`'> child: (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: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:keywords) op: assign_op.Equal rhs: {(DQ )} spids: [509] ) ] ) terminator: <Id.Op_Semi _> ) (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: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<echo>} {(DQ ($ Id.VSub_DollarName '$file'))}) (C {<grep>} {<-Eq>} {(SQ <'\\.(html|shtml|php)$'>)}) ] negated: F ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:title) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Simple words: [ {<sed>} {<-n>} {(SQ <'s/.*<title>\\(.*\\)<\\/title>.*/\\1/ip;T;q'>)} ] redirects: [ (redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {(DQ ($ Id.VSub_DollarName '$file'))} ) ] do_fork: T ) ) } spids: [541] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:keywords) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Simple words: [ {<sed>} {<-n>} { (SQ < 's/.*<META.*NAME="keywords".*CONTENT="\\(.*\\)".*/\\1/ip;T;q' > ) } ] redirects: [ (redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {(DQ ($ Id.VSub_DollarName '$file'))} ) ] do_fork: T ) ) } spids: [569] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:description) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Simple words: [ {<sed>} {<-n>} { (SQ < 's/.*<META.*NAME="description".*CONTENT="\\(.*\\)".*/\\1/ip;T;q' > ) } ] redirects: [ (redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {(DQ ($ Id.VSub_DollarName '$file'))} ) ] do_fork: T ) ) } spids: [595] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:page_author) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Simple words: [ {<sed>} {<-n>} { (SQ < 's/.*<META.*NAME="author".*CONTENT="\\(.*\\)".*/\\1/ip;T;q' > ) } ] redirects: [ (redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {(DQ ($ Id.VSub_DollarName '$file'))} ) ] do_fork: T ) ) } 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_Dollar '$'> <' '> ($ Id.VSub_DollarName '$page_author') ) } spids: [647] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<echo>} {(DQ ($ Id.VSub_DollarName '$extracted_text'))} ) (C {<xml_unescaped>}) ] negated: F ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Simple words: [ {<echo>} { (DQ <'Error: HTML metadata in '> ($ Id.VSub_DollarName '$file') <' will not produce a valid XML feed'> ) } ] redirects: [ (redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [660 673] ) ] ) ] spids: [519 538] ) (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-x>} {(DQ ($ Id.VSub_DollarName '$file'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:description) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<sed>} {<-n>} {(SQ <'3s/# \\(.*\\)/\\1/p'>)} {(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: <Id.Left_Backtick '`'> child: (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: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-z>} {(DQ ($ Id.VSub_DollarName '$keywords'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ForEach iter_names: [keyword] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName '$keywords')}]) 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: <Id.Left_Backtick '`'> child: (C {<echo>} {<-ne>} { (DQ ($ Id.VSub_DollarName '$tags') <'<category>'> ($ Id.VSub_DollarName '$keyword') <'</category>'> <Id.Lit_BadBackslash '\\'> <'n '> ) } ) ) } spids: [815] ) ] ) ] ) ) ] spids: [785 800] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$page_author'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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: <Id.Op_Semi _> ) ] ) 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: <Id.Left_Backtick '`'> child: (C {<echo>} {<-ne>} { (DQ <'<author>'> ($ Id.VSub_DollarName '$page_author') <'</author>'> <Id.Lit_BadBackslash '\\'> <'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 <'</channel>\n'> <'</rss>'>)}) ] ) ] )