Ansible 正则表达式转义美元字符

2023-12-02

我正在尝试使用 Ansible 修改配置文件中的 URL 值

$CONSOLE_URI = "http://172.18.18.103/controller/";

我正在使用 lineinfile 模块,但它不起作用,我尝试用双反斜杠转义 $,但它也不起作用。

 - lineinfile: dest=/etc/log.conf regexp='^\\$CONSOLE_URI' line='$CONSOLE_URI=http://google.com';

我认为你的正则表达式是正确的。我刚刚对此进行了测试,写入文件的行实际上包含引号。这是内容/etc/log.conf:

'$CONSOLE_URI=http://google.com';

如果这是您的意图(我不相信),您当然需要将引号添加到正则表达式中。

不要问我为什么单引号有时有效有时无效。在这种情况下,您需要对行使用双引号,而对于正则表达式,单引号起作用......

- lineinfile: dest=/etc/log.conf regexp='^\\$CONSOLE_URI' line="$CONSOLE_URI=http://google.com"

无论如何,我强烈建议使用 YAML 语法而不是 key=value 语法。我发现后者极难阅读,而 Ansible 的核心就是可读性。在正确的 YAML 语法中,您还可以几乎完全丢弃引号,如果您使用包含单引号和双引号的更复杂的命令,这会很有帮助,然后您将不得不再次转义它们。所以理想情况下(我认为)你的任务应该是这样的:

- lineinfile:
    dest: /etc/log.conf
    regexp: ^\$CONSOLE_URI
    line: $CONSOLE_URI=http://google.com

在这种情况下,你只需要逃避$ once.

这是使用 Ansible 2.0.0.2 进行测试的。

PS:不确定;你的行,如果它应该在文件内或不在文件内。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ansible 正则表达式转义美元字符 的相关文章

随机推荐