首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将template.txt包含为脚本的here-doc

如何将template.txt包含为脚本的here-doc
EN

Stack Overflow用户
提问于 2012-04-01 01:43:26
回答 5查看 2.3K关注 0票数 3

我有一个模板文件(template.txt):

代码语言:javascript
复制
Hello, $x
Hello, $y

我有一个脚本文件(script.sh):

代码语言:javascript
复制
#!/bin/bash
$x=linux
$y=unix
# I want to include template.txt as a here-doc

如何将template.txt包含为here-doc of script.sh

因此,当我运行script.sh时,输出应该是:

代码语言:javascript
复制
Hello, linux
Hello, unix

编辑:

我认为replace对我的工作来说是个很好的命令:

代码语言:javascript
复制
$ cat template.txt | replace '$x' linux '$y' unix

一种更复杂的工具:

代码语言:javascript
复制
$ cheetah compile template.tmpl
$ x=linux y=unix python template.py --env
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-01 01:49:06

我在我的一个项目中使用这个函数。它从模板构建一个实际的文档,然后使用.在当前的shell中执行它。

代码语言:javascript
复制
# usage: apply_template /path/to/template.txt
apply_template () {
        (
        trap 'rm -f $tempfile' EXIT
        tempfile=$(mktemp $(pwd)/templateXXXXXX)

        echo 'cat <<END_TEMPLATE' > $tempfile
        cat $1 >> $tempfile
        echo END_TEMPLATE >> $tempfile

        . $tempfile
        )
}
票数 3
EN

Stack Overflow用户

发布于 2013-02-14 08:20:42

下面的bash函数计算任意文件作为这里的文档,允许bash作为一种迷你模板语言使用。它不需要任何临时文件。

代码语言:javascript
复制
#!/bin/bash

template() {
  file=$1
  shift
  eval "`printf 'local %s\n' $@`
cat <<EOF
`cat $file`
EOF"
}

变量将从环境中展开或可以直接传递,例如,对于模板文件

代码语言:javascript
复制
Hello $x, $y, $z

和片段

代码语言:javascript
复制
y=42
for i in 1 2; do
  template template.txt x=$i z=end
done

输出将是

代码语言:javascript
复制
Hello 1, 42, end
Hello 2, 42, end

注意,模板文件中的任意代码也将被执行,所以请确保您信任编写它的人。

票数 5
EN

Stack Overflow用户

发布于 2012-04-01 01:53:33

代码语言:javascript
复制
#!/bin/bash

x=linux
y=unix

cat << EOF
Hello, $x
Hello, $y
EOF
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9961262

复制
相关文章

相似问题

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