首页 > 解决方案 > 将未知数量的参数从命令行传递到 Makefile

问题描述

我有一个要在本地运行的 docker 映像,为了让我的生活更轻松,我正在使用 make 文件来传递 AWS 环境变量。

aws_access_key_id := $(shell aws configure get aws_access_key_id)
aws_secret_access_key   := $(shell aws configure get aws_secret_access_key)
aws_region := $(shell aws configure get region)

docker-run:
    docker run -e AWS_ACCESS_KEY_ID="$(aws_access_key_id)" -e AWS_SECRET_ACCESS_KEY="$(aws_secret_access_key)" -e AWS_DEFAULT_REGION="$(aws_region)" --rm mydocker-image

我需要找到一种方法在我的终端中做这样的事情

 make docker-run  -d my_db -s dev -t my_table -u my_user -i URI://redshift

 make docker-run  --pre-actions "delete from dev.my_table where first_name = 'John'" -s dev -t my_table 

 make docker-run -s3 s3://temp-parquet/avro/ -s dev -t my_table -u myuser -i URI://redshift

这些是我的 docker(带有 的 python 应用程序argparse)将接受的参数。

标签: bashmakefile

解决方案


你不能直接这样做。make 的命令行参数由 make 解析,并且必须是有效的 make 程序命令行参数。Makefile 不是 shell 脚本,make 也不是通用的解释器:没有向它传递任意选项的工具。

您可以通过将它们放入变量中来做到这一点,如下所示:

make docker-run DOCKER_ARGS="-d my_db -s dev -t my_table -u my_user -i URI://redshift"

make docker-run DOCKER_ARGS="-d my_db -s dev -t my_table"

然后$(DOCKER_ARGS)在你的makefile中使用。但这是唯一的方法。


推荐阅读