如何用 Salt 转义复杂的字符串?

How to escape complex string with Salt?

我想使用 Salt 状态来更改系统网络上的 PROMPT_COMMAND,但我一直无法找出正确的字符串转义策略。提示命令为:

PROMPT_COMMAND='PS1="`if [[ $? -eq "0" ]]; then echo "\[\033[32m\]"; else echo "\[\033[31m\]"; fi`\! \[3[36m\]\u@\h \[3[33m\]\W \[3[0m\]$ "'

首先我尝试了:

/etc/bash.bashrc:
  file.append:
    - text:
      - PROMPT_COMMAND='PS1="`if [[ $? -eq "0" ]]; then echo "\[\033[32m\]"; else echo "\[\033[31m\]"; fi`\! \[3[36m\]\u@\h \[3[33m\]\W \[3[0m\]$ "'

但是状态不会编译。我通过引用字符串并转义其中的嵌套实例,又尝试了两次(一次用单引号,一次用双引号)。都没有成功。然后我将指令放在文本文件中 (bashrc.txt) 并尝试:

/etc/bash.bashrc:
  file.append:
    - source: salt://_fragments/bashrc.txt

但这也会破坏渲染系统,尽管您会注意到我故意省略了一个 - template: jinja 参数。


是否有通过 Salt 或 Jinja 提供的其他转义机制可以抵御这个特别可怕的字符串中出现的无数嵌套刻度、引号和反斜杠?

你试过吗?

/etc/bash.bashrc:
  file.append:
    - text: |
        PROMPT_COMMAND='PS1="`if [[ $? -eq "0" ]]; then echo "\[\033[32m\]"; else echo "\[\033[31m\]"; fi`\! \[3[36m\]\u@\h \[3[33m\]\W \[3[0m\]$ "'

已接受答案的替代方法是使用 jinja2 标签:

{% raw %}
string
{% endraw %}