【发布时间】:2016-10-03 11:42:05
【问题描述】:
我正在使用 makefile 通过 Amazon 的 CLI 将静态内容部署到 s3 存储桶。我想输入一个变量来选择目标目的地,这样我就不需要在不同的 make 动词中重复相同的脚本。
我似乎已经让它工作了,但我想让参数在执行时从终端不区分大小写。这是我所拥有的:
S3_NAME_DEV = com-mydomain-application-dev
S3_NAME_LIVE = com-mydomain-application
deploy:
# e.g. make deploy t=LIVE
aws s3 sync dist/ s3://$(S3_NAME_${t})
我尝试添加两个插入符号(bash 4 支持并且我正在使用)$(S3_NAME_${t^^}) 但不起作用:/。这是我执行$ make deploy t=live 时的输出(变量消失了)。
$ make deploy t=live
# e.g. make deploy t=LIVE
aws s3 sync dist/ s3://
我认为包含 aws 命令的外观可能会很有用(这样不知道 AWS CLI 不会让您失望)。
aws s3 sync dist/ s3://com-mydomain-application
在shell中我调用make我可以成功地做到这一点:
$ t=live
$ echo ${t^^}
LIVE
任何帮助将不胜感激。
奖励积分:设置默认值
更新:
所以 make 不会像我假设的那样继承执行它的 bash。如果我在 make 文件中 @echo "my version is: $$BASH_VERSION" 我得到版本 3.2(OS X 默认)。解决这个问题的机会很大。
【问题讨论】:
-
@Sundeep 对不起,我没有包括在内;我已经编辑了帖子。
-
没有问题,如果你把所有的大写都给它工作吗?
-
@Sundeep 一旦我包含了
^^,就会给出t=live或t=LIVE的空值。如果我删除^^$ make deploy t=LIVE将再次工作。 -
好的,你可以试试
$(S3_NAME_"${t^^}")吗? -
@Sundeep 试了一下。不幸的是,同样的输出。