bash - 将未知数量的参数从命令行传递到 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
)将接受的参数。
解决方案
你不能直接这样做。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中使用。但这是唯一的方法。
推荐阅读
- ruby-on-rails - 如何在 RSpec 中模拟方法调用
- apache-spark - 从多个 Kafka 主题读取的 Spark 结构化流式应用程序
- javascript - window.open 进行下载,然后是 window.location 更改不下载
- php - 如何仅调用特定的标签 Slug
- vagrantfile - 如何覆盖每个提供商的 Vagrantfile 的 synced_folder 类型?
- python - 调试时在 pool.close() 上抛出异常,但在运行时没有
- android - 发布到 API 或向我的应用程序添加付款的意图是什么?(喜欢记笔记)
- sql-server - kafka 连接接收器的唤醒异常
- javascript - 基于 JavaScript 中的部分字符串匹配过滤对象
- c# - 在 Asp .Net 中使用 SignalR 创建实时数据库