(CommandList children: [ (AndOr children: [ (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$BALLS_LIB"))})) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:BALLS_LIB) op:Equal rhs:{(.)} spids:[15])] spids: [15] ) ] op_id: Op_DAmp ) (AndOr children: [ (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$BALLS_CONF"))})) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:BALLS_CONF) op:Equal rhs:{(./config.sh)} spids:[31])] spids: [31] ) ] op_id: Op_DAmp ) (AndOr children: [ (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$BALLS_ROOT"))})) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:BALLS_ROOT) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(readlink)} {(-f)} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(dirname)} {($ VSub_Name "$BALLS_CONF")})] ) left_token: <Left_CommandSub "$("> spids: [53 57] ) (/../) ) } ) ] ) left_token: <Left_CommandSub "$("> spids: [47 60] ) } spids: [46] ) ] spids: [46] ) ] op_id: Op_DAmp ) (AndOr children: [ (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$BALLS_LIB"))})) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:BALLS_LIB) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(dirname)} {($ VSub_Number "$0")})]) left_token: <Left_CommandSub "$("> spids: [75 79] ) } spids: [74] ) ] spids: [74] ) ] op_id: Op_DAmp ) (AndOr children: [ (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$BALLS_TMP"))})) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:BALLS_TMP) op:Equal rhs:{(/tmp/balls)} spids:[94])] spids: [94] ) ] op_id: Op_DAmp ) (AndOr children: [ (DBracket expr:(BoolUnary op_id:BoolUnary_d child:{(DQ ($ VSub_Name "$BALLS_TMP"))})) (C {(mkdir)} {(DQ ($ VSub_Name "$BALLS_TMP"))}) ] op_id: Op_DPipe ) (AndOr children: [ (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$BALLS_PORT"))})) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:BALLS_PORT) op:Equal rhs:{(3000)} spids:[128])] spids: [128] ) ] op_id: Op_DAmp ) (AndOr children: [ (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$BALLS_VIEWS"))})) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:BALLS_VIEWS) op: Equal rhs: {($ VSub_Name "$BALLS_ROOT") (/views)} spids: [144] ) ] spids: [144] ) ] op_id: Op_DAmp ) (AndOr children: [ (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$BALLS_ACTIONS"))})) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:BALLS_ACTIONS) op: Equal rhs: {($ VSub_Name "$BALLS_ROOT") (/actions)} spids: [160] ) ] spids: [160] ) ] op_id: Op_DAmp ) (C {(.)} {($ VSub_Name "$BALLS_LIB") (/util.sh)}) (C {(.)} {($ VSub_Name "$BALLS_LIB") (/http.sh)}) (C {(.)} {($ VSub_Name "$BALLS_LIB") (/router.sh)}) (C {(.)} {($ VSub_Name "$BALLS_LIB") (/server.sh)}) (C {(.)} {($ VSub_Name "$BALLS_LIB") (/view.sh)}) (C {(.)} {($ VSub_Name "$BALLS_LIB") (/model.sh)}) ] )