(command.CommandList children: [ (command.Simple blame_tok:<set> more_env:[] words:[{<set>} {<-u>}] redirects:[] do_fork:T) (command.ShFunction name_tok: <die> name: die body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-gt>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'error: '> ($ Id.VSub_Star '*'))}] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike 'BASE_DIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'BASE_DIR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'BASE_DIR='> name:BASE_DIR) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <dirname> more_env: [] words: [{<dirname>} {(DQ ($ Id.VSub_Number 0))}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'LIB_DIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'LIB_DIR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'LIB_DIR='> name:LIB_DIR) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name BASE_DIR) <'/lib'>)} ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <.> more_env: [] words: [{<.>} {(DQ (${ Id.VSub_Name LIB_DIR) <'/shflags'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <die> more_env: [] words: [{<die>} {(SQ <'unable to load shflags library'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <.> more_env: [] words: [{<.>} {(DQ (${ Id.VSub_Name LIB_DIR) <'/shlib'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <die> more_env: [] words: [{<die>} {(SQ <'unable to load shlib library'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <.> more_env: [] words: [{<.>} {(DQ (${ Id.VSub_Name LIB_DIR) <'/versions'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <die> more_env: [] words: [{<die>} {(SQ <'unable to load versions library'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'BASE_DIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'BASE_DIR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'BASE_DIR='> name:BASE_DIR) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <shlib_relToAbsPath> more_env: [] words: [{<shlib_relToAbsPath>} {(DQ (${ Id.VSub_Name BASE_DIR))}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'os_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'os_name='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'os_name='> name:os_name) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <versions_osName> more_env: [] words: [{<versions_osName>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(SQ <'s/ /_/g'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'os_version='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'os_version='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'os_version='> name:os_version) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <versions_osVersion> more_env: [] words: [{<versions_osVersion>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <DEFINE_boolean> more_env: [] words: [{<DEFINE_boolean>} {<force>} {<false>} {(SQ <'force overwrite'>)} {<f>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <DEFINE_string> more_env: [] words: [{<DEFINE_string>} {<output_dir>} {(DQ (${ Id.VSub_Name TMPDIR))} {(SQ <'output dir'>)} {<d>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <DEFINE_string> more_env: [] words: [ {<DEFINE_string>} {<output_file>} {(DQ (${ Id.VSub_Name os_name) <-> (${ Id.VSub_Name os_version) <.txt>)} {(SQ <'output file'>)} {<o>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <DEFINE_string> more_env: [] words: [{<DEFINE_string>} {<runner>} {(SQ <test_runner>)} {(SQ <'unit test runner'>)} {<r>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <DEFINE_boolean> more_env: [] words: [{<DEFINE_boolean>} {<dry_run>} {<false>} {(DQ <'suppress logging to a file'>)} {<n>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <main> name: main body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'output='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'output='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'output='> name:output) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name FLAGS_output_dir> var_name: FLAGS_output_dir suffix_op: (suffix_op.Unary op: <Id.VTest_ColonPlus _> arg_word: {(${ Id.VSub_Name FLAGS_output_dir) <Id.Lit_Slash '/'>} ) right: <Id.Right_DollarBrace '}'> ) (${ Id.VSub_Name FLAGS_output_file) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'output='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'output='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'output='> name:output) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <shlib_relToAbsPath> more_env: [] words: [{<shlib_relToAbsPath>} {(DQ (${ Id.VSub_Name output))}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name FLAGS_dry_run))} {<-eq>} {(DQ (${ Id.VSub_Name FLAGS_FALSE))} {<-a>} {<-f>} {(DQ (${ Id.VSub_Name output))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name FLAGS_force))} {<-eq>} {(DQ (${ Id.VSub_Name FLAGS_TRUE))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {(DQ (${ Id.VSub_Name output))}] redirects: [] do_fork: T ) ] spids: [373 394] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'not overwriting \''> (${ Id.VSub_Name output) <'\''>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {(DQ (${ Id.VSub_Name FLAGS_ERROR))} ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [339 370] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name FLAGS_dry_run))} {<-eq>} {(DQ (${ Id.VSub_Name FLAGS_FALSE))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <touch> more_env: [] words: [{<touch>} {(DQ (${ Id.VSub_Name output))}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} {(DQ <'unable to write to \''> (${ Id.VSub_Name output) <'\''>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [440 461] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Subshell left: <Id.Op_LParen _> child: (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name FLAGS_dry_run))} {<-eq>} {(DQ (${ Id.VSub_Name FLAGS_FALSE))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Pipeline children: [ (command.Simple blame_tok: <Id.Left_DoubleQuote '"'> more_env: [] words: [{(DQ <'./'> (${ Id.VSub_Name FLAGS_runner))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <tee> more_env: [] words: [{<tee>} {(DQ (${ Id.VSub_Name output))}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] spids: [499 520] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <Id.Left_DoubleQuote '"'> more_env: [] words: [{(DQ <'./'> (${ Id.VSub_Name FLAGS_runner))}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) right: <Id.Right_Subshell _> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name FLAGS_dry_run))} {<-eq>} {(DQ (${ Id.VSub_Name FLAGS_FALSE))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Output written to \''> (${ Id.VSub_Name output) <'\'.'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) ] spids: [558 579] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.AndOr children: [ (command.Simple blame_tok: <FLAGS> more_env: [] words: [{<FLAGS>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {($ Id.VSub_QMark '?')} ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name FLAGS_help))} {<-eq>} {(DQ (${ Id.VSub_Name FLAGS_FALSE))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit>) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {<set>} {<-->} {(DQ (${ Id.VSub_Name FLAGS_ARGV))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <main> more_env: [] words: [ {<main>} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_At '@'> var_name: '@' suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:(rhs_word__Empty)) right: <Id.Right_DollarBrace '}'> ) ) } ] redirects: [] do_fork: T ) ] )