(command.CommandList children: [ (command.Simple blame_tok:<set> more_env:[] words:[{<set>} {<-e>}] redirects:[] do_fork:T) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<pipefail>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <errexit> name: errexit body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike 'BUNDLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'BUNDLE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'BUNDLE='> name:BUNDLE) op: assign_op.Equal rhs: { (DQ <'bundles/'> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {<VERSION>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.ShFunction name_tok: <bundle_files> name: bundle_files body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ForEach keyword: <Id.KW_For for> iter_names: [f] iterable: (for_iter.Words words:[{<dockerd>} {<docker-proxy>}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (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 '['>} {<-d>} {($ Id.VSub_DollarName BUNDLE) <'/dynbinary-daemon'>} {<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>} {($ Id.VSub_DollarName BUNDLE) <'/dynbinary-daemon/'> ($ Id.VSub_DollarName f) } ] redirects: [] do_fork: T ) ] spids: [109 121] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {($ Id.VSub_DollarName BUNDLE) <'/binary-daemon/'> ($ Id.VSub_DollarName f) } ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [f] iterable: (for_iter.Words words: [ {<docker-containerd>} {<docker-containerd-ctr>} {<docker-containerd-shim>} {<docker-init>} {<docker-runc>} ] ) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {($ Id.VSub_DollarName BUNDLE) <'/binary-daemon/'> ($ Id.VSub_DollarName f)} ] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) 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 '['>} {<-d>} {($ Id.VSub_DollarName BUNDLE) <'/dynbinary-client'>} {<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>} {($ Id.VSub_DollarName BUNDLE) <'/dynbinary-client/docker'>}] redirects: [] do_fork: T ) ] spids: [177 189] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {($ Id.VSub_DollarName BUNDLE) <'/binary-client/docker'>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <control_docker> name: control_docker body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'm='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'm='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'm='> name:m) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike 'op='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'op='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'op='> name:op) op: assign_op.Equal rhs: {($ Id.VSub_Number 2)} ) ] redirects: [] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'if command -v systemctl > /dev/null; then\n'> <' systemctl '> ($ Id.VSub_DollarName op) <' docker\n'> <'elif command -v service > /dev/null; then\n'> <' service docker '> ($ Id.VSub_DollarName op) <'\n'> <'elif [ -x /etc/init.d/docker ]; then\n'> <' /etc/init.d/docker '> ($ Id.VSub_DollarName op) <'\n'> <'else\n'> <' echo '> <Id.Right_DoubleQuote '"'> <'not sure how to control the docker daemon'> <Id.Right_DoubleQuote '"'> <'\n'> <' exit 1\n'> <'fi\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <docker-machine> more_env: [] words: [{<docker-machine>} {<ssh>} {($ Id.VSub_DollarName m)} {<sudo>} {<sh>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <detect_prefix> name: detect_prefix body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'm='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'm='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'm='> name:m) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'script='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'script='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'script='> name:script) op: assign_op.Equal rhs: {(SQ <'dirname $(dirname $(which dockerd))'>)} ) ] redirects: [] ) (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {($ Id.VSub_DollarName script)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <docker-machine> more_env: [] words: [{<docker-machine>} {<ssh>} {($ Id.VSub_DollarName m)} {<sh>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <install_to> name: install_to body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'm='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'm='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'm='> name:m) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike 'files='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'files='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'files='> name:files) op: assign_op.Equal rhs: {($ Id.VSub_At '@')} ) ] redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName m) <': detecting docker'>)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'prefix='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'prefix='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'prefix='> name:prefix) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <detect_prefix> more_env: [] words: [{<detect_prefix>} {($ Id.VSub_DollarName m)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ ($ Id.VSub_DollarName m) <': detected docker on '> ($ Id.VSub_DollarName prefix)) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName m) <': stopping docker'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <control_docker> more_env: [] words: [{<control_docker>} {($ Id.VSub_DollarName m)} {<stop>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName m) <': installing docker'>)}] redirects: [] do_fork: T ) (command.Pipeline children: [ (command.Simple blame_tok: <tar> more_env: [] words: [ {<tar>} {<ch>} {<--transform>} {(SQ <'s/.*\\///'>)} {($ Id.VSub_DollarName files)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <docker-machine> more_env: [] words: [ {<docker-machine>} {<ssh>} {($ Id.VSub_DollarName m)} {<sudo>} {<tar>} {<Cx>} {($ Id.VSub_DollarName prefix) <'/bin'>} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName m) <': starting docker'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <control_docker> more_env: [] words: [{<control_docker>} {($ Id.VSub_DollarName m)} {<start>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName m) <': done'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <check_prereq> name: check_prereq body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <command> more_env: [] words: [{<command>} {<-v>} {<docker-machine>}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <errexit> more_env: [] words: [{<errexit>} {(DQ <'docker-machine not installed'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Subshell left: <Id.Op_LParen _> child: (command.Pipeline children: [ (command.Simple blame_tok: <tar> more_env: [] words: [{<tar>} {<--version>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {<GNU>}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) ] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Right_Subshell _> redirects: [] ) (command.Simple blame_tok: <errexit> more_env: [] words: [{<errexit>} {(DQ <'GNU tar not installed'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Left_DoubleQuote '"'> pattern: (pat.Words words:[{(DQ <install>)}]) middle: <Id.Right_CasePat _> action: [ (command.Sentence child: (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike 'machines='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'machines='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'machines='> name:machines) op: assign_op.Equal rhs: {($ Id.VSub_At '@')} ) ] redirects: [] ) (command.Simple blame_tok: <check_prereq> more_env: [] words: [{<check_prereq>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'files='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'files='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'files='> name:files) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <bundle_files> more_env: [] words: [{<bundle_files>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Files to be installed:'>)}] redirects: [] do_fork: T ) (command.ForEach keyword: <Id.KW_For for> iter_names: [f] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName files)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Sentence child: (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {($ Id.VSub_DollarName f)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'pids='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'pids='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'pids='> name:pids) op: assign_op.Equal rhs: { (ShArrayLiteral left: <Id.Op_LParen _> words: [] right: <Id.Right_ShArrayLiteral _> ) } ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [m] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName machines)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Sentence child: (command.Simple blame_tok: <install_to> more_env: [] words: [ {<install_to>} {($ Id.VSub_DollarName m)} {($ Id.VSub_DollarName files)} ] redirects: [] do_fork: T ) terminator: <Id.Op_Amp _> ) (command.ShAssignment left: <Id.Lit_VarLike 'pids+='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'pids+='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'pids+='> name:pids) op: assign_op.PlusEqual rhs: { (ShArrayLiteral left: <Id.Op_LParen _> words: [{($ Id.VSub_Bang '!')}] right: <Id.Right_ShArrayLiteral _> ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'status='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'status='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'status='> name:status) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [pid] iterable: (for_iter.Words words: [ { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name pids> var_name: pids bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) right: <Id.Right_DollarBrace '}'> ) } ] ) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.AndOr children: [ (command.Simple blame_tok: <wait> more_env: [] words: [{<wait>} {($ Id.VSub_DollarName pid)}] redirects: [] do_fork: T ) (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'status='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'status='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'status='> name: status ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'background process '> ($ Id.VSub_DollarName pid) <' failed with exit status '> ($ Id.VSub_DollarName status) ) } ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ] ops: [<Id.Op_DPipe _>] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {($ Id.VSub_DollarName status)} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <errexit> more_env: [] words: [{<errexit>} {(DQ <'Usage: '> ($ Id.VSub_Number 0) <' install MACHINES'>)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] )