首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将未知数量的参数从命令行传递到Makefile

将未知数量的参数从命令行传递到Makefile
EN

Stack Overflow用户
提问于 2021-01-16 05:44:01
回答 3查看 54关注 0票数 0

我有一个docker镜像,我想在本地运行,为了让我的生活更容易,我使用make file来传递AWS环境变量。

代码语言:javascript
复制
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

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

代码语言:javascript
复制
 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 (带有argparse的python应用程序)将接受的参数。

EN

回答 3

Stack Overflow用户

发布于 2021-01-16 05:47:29

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

您可以通过将它们放入一个变量中来完成此操作,如下所示:

代码语言:javascript
复制
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"

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

票数 3
EN

Stack Overflow用户

发布于 2021-01-16 08:34:21

如果你想自己做参数解析,你可能不需要Makefile!您可能应该编写一个Bash脚本。

示例:

代码语言:javascript
复制
#!/usr/bin/env bash
set -euo pipefail

aws_access_key_id="$(aws configure get aws_access_key_id)"
aws_secret_access_key="$(aws configure get aws_secret_access_key)"
aws_region="$(aws configure get region)"

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-imagedocker "$@"

注意末尾的$@,它将参数从Bash传递给docker命令。

票数 1
EN

Stack Overflow用户

发布于 2021-01-16 06:01:01

你可能想试试这样的方法:

代码语言:javascript
复制
$ cat Makefile 
all:
        @echo make docker-run  -d my_db -s dev -t my_table $${MYUSER+-u "$(MYUSER)"} $${URI+-i "URI://$(URI)"}
$ make
make docker-run -d my_db -s dev -t my_table
$ make MYUSER=myuser URI=redshift
make docker-run -d my_db -s dev -t my_table -u myuser -i URI://redshift
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65743946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档