GNU从模板创建文件

时间:2016-03-01 17:35:07

标签: variables makefile

我有一个基本的make实验,我试图从具有可变替换的模板创建一个新文件,基本上:

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语句和创建的文件都在一行上 - 模板文件没有换行符。另外,你很快就注意到我没有使用GETCONFIG来设置DOCKERFILE_TEMPLATE。问题:

  1. 如何从模板文件中保留新的行字符
  2. 如何使用调用GETCONFIG设置DOCKERFILE_TEMPLATE?
  3. 我还邀请了关于"更好"整体练习,但我对这篇文章的关注点是上面的两个问题。谢谢。

1 个答案:

答案 0 :(得分:0)

您无法使用$(shell ...)保留换行符。在这方面,它就像炮弹中的反击。文档很清楚:

  

唯一的处理结果就是转换每个换行符   (或回车/换行对)到一个空格。如果有的话   尾随(回车和换行)换行符将被删除。

我无法想到用纯GNU make进行这种处理的方法。但是您似乎已经使用了各种shell工具,那么为什么不使用合适的shell工具来执行此操作,例如sed