Makefile中实现交互式项目多选菜单 适配AWS多环境部署需求
实现方案
直接在现有Makefile基础上添加项目列表定义和交互逻辑即可,完整代码如下:
# 指定用bash执行任务,兼容select交互语法 SHELL := /bin/bash # 原有环境和部署目标定义 ENVIRONMENTS := development staging production TARGETS := $(foreach X,$(ENVIRONMENTS),deploy-$X) # 新增可选项目列表定义,可按需修改 PROJECTS := api web somethingelse $(TARGETS): $(eval ENV:=$(subst deploy-,,$(@))) # 交互式选择项目逻辑 $(eval project:=$(shell \ # 提示内容输出到stderr,避免被shell函数捕获导致用户看不到 echo "Please select the project:" > /dev/stderr; \ # 自动生成带编号的选择菜单 select proj in $(PROJECTS); do \ if [ -n "$$proj" ]; then \ echo $$proj; \ break; \ else \ echo "无效选项,请重新输入" > /dev/stderr; \ fi; \ done \ )) # 后续部署逻辑可直接使用 $(ENV) 和 $(project) 变量 @echo "开始部署 $(project) 到 $(ENV) 环境"
功能说明
- 执行
make deploy-production等命令时,会直接输出你预期的选择提示,输入对应数字即可完成选择 - 自带无效输入校验,用户输入非可选范围的内容时会提示重输,不会中断流程
- 所有shell变量前加
$$是为了避免被Make提前解析,属于Makefile调用shell的标准转义规则
内容的提问来源于stack exchange,提问作者Kristi Jorgji
相关产品推荐
相关产品推荐

