(command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<line>}] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.AndOr children: [ (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {($ Id.VSub_DollarName line)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [ {<awk>} { (SQ < 'NF==4 { print "mkdir -p "$4" || exit 1; chmod "$1" "$4" || exit 1; chown "$2" "$4" || exit 1; chgrp "$3" "$4" || exit 1" } NF==3 { print "rm "$1" ; ln -s "$3" "$1" || exit 1" } ' > ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <sh> more_env: [] words: [{<sh>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ops: [<Id.Op_DPipe _>] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] ops: [<Id.Op_Pipe _>] )