gpt4 book ai didi

docker - Makefile - 包罗万象的目标

转载 作者:行者123 更新时间:2023-12-02 20:09:17 24 4
gpt4 key购买 nike

我想知道是否可以让 Makefile 向未知目标发出命令并直接运行它。

例如,我有一个脚本(我无法更改)向我的应用程序 Docker 容器发出命令,如下所示:

docker run -it my_app:latest "env FOO=bar bundle exec rails c"

这被翻译成:制作“env FOO=bar bundle exec rails c”

生成:Makefile:7: *** 缺少目标模式。停止。

这是我第一次捕捉未知目标的尝试:

.DEFAULT_GOAL: passthrough

passthrough:
@echo $(MAKECMDGOALS) # always empty
@echo ${ARGS} # always empty

是否可以在 docker run 参数中捕获传递给 Makefile 的整个字符串并直接运行它?

最佳答案

我意识到这已经晚了一年半,但既然我有这个问题并且有一些合理的东西 - 我猜其他人可能会做下去。

像这样使用 Makefile 和 .DEFAULT 目标

docker_cmd = docker run --rm -it bash -c

.DEFAULT:
@$(docker_cmd) "$@"

您可以使用单个“目标”调用 make,该“目标”按原样传递给 $@

$ make 'env FOO=bar /usr/bin/uptime'
21:06:15 up 24 days, 9:26, load average: 0.54, 0.46, 0.52

关键是 make 的参数是一个被适当引用的参数 - 否则 make 会做它所做的并将参数解释为目标列表调用 - 这会完全做其他事情。

$ make env FOO=bar /usr/bin/uptime                                                                                                                  
HOSTNAME=434c34a12b25
PWD=/
_BASH_GPG_KEY=7C0135FB088AAF6C66C650B9BB5869F064EA74AB
HOME=/root
_BASH_VERSION=5.0
_BASH_PATCH_LEVEL=0
_BASH_LATEST_PATCH=0
TERM=xterm
SHLVL=0
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env
make: '/usr/bin/uptime' is up to date.
$ make badcmd env FOO=bar /usr/bin/uptime                                                                                                          
bash: badcmd: command not found
make: *** [Makefile:90: badcmd] Error 127

关于docker - Makefile - 包罗万象的目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47640803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com