我做了一个基本的制作实验,尝试从一个带有变量替换的模板创建一个新文件,本质上是:
GETCONFIG = $(shell ./test.sh getvalue $(1) app.config.sh)
DOCKERFILE := $(call GETCONFIG,DOCKERFILE)
DOCKERFILE_TEMP := $(call GETCONFIG,DOCKERFILE_TEMPLATE)
DOCKERFILE_TEMPLATE := $(shell cat `./test.sh getvalue DOCKERFILE_TEMPLATE app.config.sh`)
all:
echo $(DOCKERFILE_TEMP)
echo $(DOCKERFILE_TEMPLATE)
echo $(DOCKERFILE_TEMPLATE:{port}=80)
$(file > $(DOCKERFILE),$(DOCKERFILE_TEMPLATE:{port}=80))我的模板文件非常基本:
FROM node:4.3
EXPOSE {port}实验的结果是:
echo Dockerfile.template
Dockerfile.template
echo FROM node:4.3 EXPOSE {port}
FROM node:4.3 EXPOSE {port}
echo FROM node:4.3 EXPOSE 80
FROM node:4.3 EXPOSE 80因此,部分成功,但是最后一个echo语句和创建的文件都在一行上--没有从模板文件中断的行。另外,prob注意到我没有使用GETCONFIG设置DOCKERFILE_TEMPLATE。问题:
我还请大家就“更好”的实践提出建议,但我在这篇文章中的重点是上述两个问题。谢谢。
发布于 2016-03-04 04:05:38
不能用$(shell ...)保留换行符。在这方面,就像壳里的后背一样。这些文件非常清楚:
对结果所做的唯一处理是将每个换行符(或回车/换行符对)转换为单个空格。如果有一个尾随(回车和)换行符,它将简单地被删除。
我想不出用纯GNU make进行这种处理的方法。但是您似乎已经在使用各种shell工具了,那么为什么不使用一个适当的shell工具来实现它,比如sed呢?
https://stackoverflow.com/questions/35729572
复制相似问题