繁体   English   中英

Ansible 在 mac 与 ubuntu 上逃避字符串问题?

[英]Ansible escaping a string issue on mac vs ubuntu?

使用以下代码:

  - name: Add the gii config for main.php on staging
    blockinfile:
      dest: "{{ www_path }}/protected/config/main.php"
      marker: "//Gii"
      insertafter: "\'modules\'=>array\\("
      block: "{{ gii_content }}"

我在 OSX 上遇到语法错误:

ERROR! Syntax Error while loading YAML.
The offending line appears to be:

      marker: "//Gii"
      insertafter: "\'modules\'=>array\\("
                     ^ here

然而在 ubuntu 上,没有这样的问题,并且剧本可以无缝运行。 有任何想法吗?

如果你通过 YAML 解析器运行它,它会告诉你它发现了一个未知的转义字符,所以 OS X 就在那里。 \\'的目的是什么? 如果想法是匹配该字符串并且反斜杠像这样出现在文件中,您应该在那里放置两个反斜杠:

  - name: Add the gii config for main.php on staging
    blockinfile:
      dest: "{{ www_path }}/protected/config/main.php"
      marker: "//Gii"
      insertafter: "\\'modules\\'=>array\\("
      block: "{{ gii_content }}"

如果array后面有两个反斜杠,你需要在那里有 4 个反斜杠,只是为了转义。 虽然因为insertafter接受一个正则表达式 and (在正则表达式中具有特殊含义,但实际上可能需要将其中的 6 个放在那里。

  - name: Add the gii config for main.php on staging
    blockinfile:
      dest: "{{ www_path }}/protected/config/main.php"
      marker: "//Gii"
      insertafter: "\\'modules\\'=>array\\\\\\("
      block: "{{ gii_content }}"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM