3

我一直在使用 Jinja2 来创建和渲染 Bash 脚本的模板(除其他外),我一直缺少像在 Mako 中那样拥有完整的 python 的功能。

目前让我无法使用 Mako 的事情似乎相当微不足道,那就是 Mako 的内联 begin/end ${/}语法与 Bash 自己的语法冲突(而 Jinja2 没有)

所以我想知道的是:有什么方法可以将 Mako 的开始/结束${/}语法更改为其他东西,而其他东西与 Bash 不冲突。

(否则,我是否遗漏了一些明显的东西?)

4

1 回答 1

1

通过预处理器运行您的模板:

from mako.template import Template
import re

def bash_preprocessor(source):
    source = re.sub(r"\${(.+?)}", r"${'${'}\1${'}'}", source)
    source = re.sub(r"\^\[(.+?)\]", r"${\1}", source)
    return source

t = Template("""

BAR='hi'
BAT='^[hoho]'
PATH='/path/to/crap'

EXECUTABLE=${PATH}/${BAR}/${BAT}

""", preprocessor=bash_preprocessor)


print t.render(hoho="boo")
于 2014-04-10T20:37:09.390 回答