我试图在盐状态中声明一个变量,该变量获取 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 有点缺乏经验,如果我遗漏了一些明显的东西,我很抱歉!感谢您的帮助:)
问题在于命令行中嵌入的
'
字符与用于分隔命令行本身的引号相匹配。
在命令行中使用不同的引号。由于命令行内部同时使用单引号和双引号,因此最简单的解决方案是在其周围加上三引号。
此外,它应该是一个原始字符串,以便
\.
中的反斜杠将按字面意思保留。
{% 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 '"' ''') %}