(command.CommandList children: [ (C {<set>} {<-e>}) (command.ShFunction name: usage body: (BraceGroup children: [ (C {<echo>} {(DQ <'Usage: -o file'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<Id.Lit_Equals '='>} {<0>} {<Id.Lit_RBracket ']'>} ) (C {<usage>}) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-gt>} {<0>} {<Id.Lit_RBracket ']'>}) ] ) body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:flag) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [60] ) ] ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$flag'))} arms: [ (case_arm pat_list: [{<-o>}] action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ) (C {<usage>}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:out) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [94] ) ] ) (C {<mkdir>} {<-p>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<dirname>} {($ Id.VSub_Number '$2')}) ) ) } ) (C {<shift>}) ] spids: [75 76 116 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [ (C {<echo>} {(DQ <'Unknown option '> ($ Id.VSub_Number '$1'))}) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [119 120 -1 136] ) ] ) (C {<shift>}) ] ) ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$out'))} {<Id.Lit_RBracket ']'>}) (C {<usage>}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:package) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<basename>} {(DQ ($ Id.VSub_DollarName '$out'))}) ) } spids: [159] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dir) op: assign_op.Equal rhs: {(DQ <'/src'>)} spids: [169] ) ] ) (C {<tar>} {<xf>} {<->} {<-C>} {($ Id.VSub_DollarName '$dir')}) (command.Subshell child: (command.CommandList children: [ (C {<cd>} {($ Id.VSub_DollarName '$dir')}) (C {<opam>} {<config>} {<exec>} {<-->} {<mirage>} {<configure>} {<-o>} {($ Id.VSub_DollarName '$out')} {<-t>} {<unix>} ) (C {<opam>} {<config>} {<exec>} {<-->} {<make>} {<depend>}) (C {<opam>} {<config>} {<exec>} {<-->} {<make>}) (C {<mv>} { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<readlink>} {($ Id.VSub_DollarName '$out')}) ) } {($ Id.VSub_DollarName '$out')} ) ] ) redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/src/logs'>}) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<cd>} {($ Id.VSub_DollarName '$dir')}) (C {<tar>} {<-cf>} {<->} {($ Id.VSub_DollarName '$out')}) ] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] )