(command.CommandList children: [ (C {<set>} {<-o>} {<errexit>}) (C {<set>} {<-o>} {<nounset>}) (C {<set>} {<-o>} {<pipefail>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KUBE_ROOT) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<dirname>} {(DQ (${ Id.VSub_Name BASH_SOURCE))}) ) <'/..'> } spids: [63] ) ] ) (C {<source>} {(DQ (${ Id.VSub_Name KUBE_ROOT) <'/hack/lib/init.sh'>)}) (C {<kube> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <golang> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setup_env> } ) (C {<make>} {<-C>} {(DQ (${ Id.VSub_Name KUBE_ROOT))} {<Id.Lit_VarLike 'WHAT='> <'cmd/linkcheck'>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:linkcheck) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<kube> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <util> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <find-binary> } {(DQ <linkcheck>)} ) ) } spids: [108] ) ] ) (C {<kube> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <util> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <ensure-temp-dir> } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OUTPUT) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name KUBE_TEMP)) <'/linkcheck-output'>} spids: [132] ) ] ) (command.ShFunction name: cleanup body: (BraceGroup children:[(C {<rm>} {<-rf>} {(DQ (${ Id.VSub_Name OUTPUT))})]) ) (C {<trap>} {(DQ <cleanup>)} {<EXIT>} {<SIGINT>}) (C {<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName '$OUTPUT'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:APIROOT) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name KUBE_ROOT) <'/pkg/api/'>)} spids: [178] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:APISROOT) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name KUBE_ROOT) <'/pkg/apis/'>)} spids: [186] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DOCROOT) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name KUBE_ROOT) <'/docs/'>)} spids: [194] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ROOTS) op: assign_op.Equal rhs: { (sh_array_literal left: <Id.Op_LParen _> words: [ {($ Id.VSub_DollarName '$APIROOT')} {($ Id.VSub_DollarName '$APISROOT')} {($ Id.VSub_DollarName '$DOCROOT')} ] ) } spids: [202] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:found_invalid) op: assign_op.Equal rhs: {<false>} spids: [211] ) ] ) (command.ForEach iter_name: root iter_words: [ { (DQ (braced_var_sub token: <Id.VSub_Name ROOTS> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (command.Simple words: [ {(DQ (${ Id.VSub_Name linkcheck))} {(DQ <'--root-dir='> (${ Id.VSub_Name root))} ] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: { (command_sub left_token: <Id.Left_ProcSubOut '>('> child: (command.Simple words: [{<tee>} {<-a>} {(DQ (${ Id.VSub_Name OUTPUT) <'/error'>)}] redirects: [ (redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ) } ) ] do_fork: T ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ret) op: assign_op.Equal rhs: {<0>} spids: [266] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ret) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [271] ) ] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_eq left: {($ Id.VSub_DollarName '$ret')} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'Failed: found invalid links in '> (${ Id.VSub_Name root) <.>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:found_invalid) op: assign_op.Equal rhs: {<true>} spids: [302] ) ] ) ] spids: [275 288] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_gt left: {($ Id.VSub_DollarName '$ret')} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'Error running linkcheck'>)}) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [309 322] ) ] ) ] ) ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name found_invalid)} {<Id.Lit_Equals '='>} {<true>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'Summary of invalid links:'>)}) (C {<cat>} {(${ Id.VSub_Name OUTPUT) <'/error'>}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [342 357] ) ] ) ] )