(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:checknodejs) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [{<hash>} {<node>}] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Pipeline children: [(C {<node>} {<--help>}) (C {<grep>} {<js>})] negated: F ) ] ) ) } spids: [7] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_ne left: {($ Id.VSub_QMark '$?')} right: {<0>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(SQ <'NodeJS (node) is not properly installed'>)}) (C {<echo>} {(SQ <'Note, on Ubuntu / Debian, you may need to also install:'>)}) (C {<echo>} {(SQ <'$ sudo apt-get install nodejs-legacy'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [30 43] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:checknpm) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Simple words: [{<hash>} {<npm>}] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) ) } spids: [77] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_ne left: {($ Id.VSub_QMark '$?')} right: {<0>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(SQ <'Node Package Manager (npm) is not properly installed'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [88 101] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$OSTYPE'))} right: {(DQ <linux-gnu>)} ) ) (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_DollarName '$CHROME_CANARY_BIN'))} ) ) ] ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:checkcanary) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Simple words: [{<hash>} {<google-chrome-canary>}] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) ) } spids: [159] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_ne left: {($ Id.VSub_QMark '$?')} right: {<0>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:checkunstable) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Simple words: [{<hash>} {<google-chrome-unstable>}] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) ) } spids: [187] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_ne left: {($ Id.VSub_QMark '$?')} right: {<0>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(SQ <'Chrome Canary is not found'>)}) (C {<echo>} {(SQ <'Please install and/or set CHROME_CANARY_BIN to its path'>)} ) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [199 212] ) ] else_action: [ (C {<export>} {<Id.Lit_VarLike 'CHROME_CANARY_BIN='> <google-chrome-unstable>}) ] ) ] spids: [171 184] ) ] ) ] spids: [127 156] ) ] ) (C {<npm>} {<install>}) (C {<npm>} {<test>}) ] )