首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GNU从模板创建创建文件

问GNU从模板创建创建文件
EN

Stack Overflow用户
提问于 2016-03-01 17:35:06
回答 1查看 1.2K关注 0票数 0

我做了一个基本的制作实验,尝试从一个带有变量替换的模板创建一个新文件,本质上是:

代码语言:javascript
复制
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))

我的模板文件非常基本:

代码语言:javascript
复制
FROM node:4.3
EXPOSE {port}

实验的结果是:

代码语言:javascript
复制
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。问题:

  1. 如何保留模板文件中的新行字符
  2. 如何使用调用GETCONFIG设置DOCKERFILE_TEMPLATE?

我还请大家就“更好”的实践提出建议,但我在这篇文章中的重点是上述两个问题。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-04 04:05:38

不能用$(shell ...)保留换行符。在这方面,就像壳里的后背一样。这些文件非常清楚:

对结果所做的唯一处理是将每个换行符(或回车/换行符对)转换为单个空格。如果有一个尾随(回车和)换行符,它将简单地被删除。

我想不出用纯GNU make进行这种处理的方法。但是您似乎已经在使用各种shell工具了,那么为什么不使用一个适当的shell工具来实现它,比如sed呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35729572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档