在Salt状态下声明Jinja变量返回错误:Jinja语法错误:预期标记',',得到'java'

问题描述 投票:0回答:1

我试图在盐状态中声明一个变量,该变量获取 shell 命令(“cmd.run”)的输出,以便我可以在该状态的其他地方使用它。这就是它的样子:

{% set minorVersion = salt['cmd.run']('/path/to/directory/java/bin/./java -version 2>&1 | awk -F'java version' '{print $1}' | awk -F'\.' '{print $2; exit}'| tr -d '"'') %}

在我的服务器上运行该 shell 命令时,该命令单独可以正常工作。但由于某种原因,该州返回了该错误,

Jinja syntax error: expected token ',', got 'java'; line 10

(第 10 行是上面的变量声明)。我一生都无法弄清楚发生了什么事......我应该在某个地方或其他地方逃避角色吗?我对 Salt 有点缺乏经验,如果我遗漏了一些明显的东西,我很抱歉!感谢您的帮助:)

python jinja2 salt-stack
1个回答
0
投票

问题在于命令行中嵌入的

'
字符与用于分隔命令行本身的引号相匹配。

在命令行中使用不同的引号。由于命令行内部同时使用单引号和双引号,因此最简单的解决方案是在其周围加上三引号。

此外,它应该是一个原始字符串,以便

\.
中的反斜杠将按字面意思保留。

{% set minorVersion = salt['cmd.run'](r'''/path/to/directory/java/bin/./java -version 2>&1 | awk -F'java version' '{print $1}' | awk -F'\.' '{print $2; exit}'| tr -d '"' ''') %}
© www.soinside.com 2019 - 2024. All rights reserved.