linux - 在文件夹上下文中多次执行命令
问题描述
我在根目录makefile
下有一个 which 。proj
文件夹proj
是主文件夹,它下面有诸如ws-led
或之类的文件夹tools-ext
,其中包含 docker 文件。此外,还有Makefile
需要运行所有命令的根目录下的哪个。
这是文件夹结构
proj
- ws-led
— Dockerfile
- tools-ext
— Dockerfile
- Makefile
我需要的是到cd
rot 下的每个文件夹(我们还有更多)并运行:
docker build <folder name> .
示例:(与手动运行以下命令完全相同)
cd ws-led
docker build -t ws-led .
cd tools-ext
docker build -t tools-ext .
我尝试以下方法(也许我在 Makefile 同一级别的所有文件夹上运行而不是 repo 参数)
喜欢(CURDIR)……</p>
all: pre docker-build
.PHONY: pre docker-build
repos := ws-led tools-ext
pre:
$(patsubst %,docker-build,$(repos))
docker-build:pre
cd $*; docker build -t $* . >&2 | tee docker-build
使用此即时消息时出现错误:
invalid argument "." for "-t, --tag" flag: invalid reference format
知道这里有什么问题吗?或者我可以做得更好?
因为我有很多我想用来make
处理它的存储库/文件夹
解决方案
有不止一种方法可以做到这一点。
您可以使用 bash for 循环:
docker-build:
for dir in $(repos); do cd $$dir; docker build -t $$dir . >&2 | tee docker-build; done
或使用模式规则(或在本例中为静态模式规则):
REPO_BUILDS := $(addsuffix -build, $(repos))
docker-build: $(REPO_BUILDS)
.PHONY: $(REPO_BUILDS)
$(REPO_BUILDS): %-build:
cd $*; docker build -t $* . >&2 | tee docker-build
推荐阅读
- php - 我不明白为什么我们在调用这个函数时需要一个参数?
- c# - .NET Core 3.1 - Linq - 选择按唯一属性分组的记录
- java - 使用 Math 类的简单代码的问题
- visual-studio-code - Visual Studio Code 终端命令删除
- c# - 使用 VS Styles 的 Mahapps 抛出 IOException
- html - Textarea 在引导程序中不会扩展到 100% 宽度
- r - 使用 stat = 'identity' 为 gg barplot 添加计数标签
- java - 无法安装 Android Studio Wear Os 应用程序 INSTALL_PARSE_FAILED_NO_CERTIFICATES
- javascript - 构建数据结构拯救学生
- mysql - 以 json 格式计算 varchar 列中的字符