需要转义 lineinfile 特殊字符的帮助
我正在尝试执行以下操作来简单地更改 bash 提示符
- name: Editing bashrc to change bash prompt
lineinfile:
path: /etc/bashrc
regexp: "export PS1='\[\033[01;31m\]\u@\h\[\033[01;34m\] \w #\[\033[00m\]'"
line: "export PS1='\[\033[01;31m\]\u@\h\[\033[01;34m\] \w #\[\033[00m\]'"
但正如您所看到的,regexp: 值充满了我需要转义的特殊字符。有没有一种简单的方法可以逃脱整条线?或者也许我应该采取另一种方式来做到这一点?
我确实尝试执行以下操作: 1:将文本添加到变量中以供重复使用
- hosts: ssh
vars:
export: "export PS1='\[\033[01;31m\]\u@\h\[\033[01;34m\] \w #\[\033[00m\]'"
- name: Editing bashrc to change bash prompt
lineinfile:
path: /etc/bashrc
line: "{{ export }}"
甚至使用 !unsafe for raw_strings
- 要转义正则表达式中的特殊字符,请使用“regex_escape”过滤器:
{{ '^f.o(.)$' | regex_escape() }}
也许我的语法不太好,但我一直遇到问题:
The offending line appears to be:
vars:
export: "export PS1='\[\033[01;31m\]\u@\h\[\033[01;34m\] \w #\[\033[00m\]'"
^ here
谢谢!
最佳答案
这不是详尽的答案,但在我看来,这些是最简单的例子。
选项 1:转义双引号内的反斜杠
export: "export PS1='\\[\\033[01;31m\\]\\u@\\h\\[\\033[01;34m\\] \\w #\\[\\033[00m\\]'"
选项 2:使用标量 block 去掉外部引号
export: |-
export PS1='\[\033[01;31m\]\u@\h\[\033[01;34m\] \w #\[\033[00m\]'
您可以查看例如learn yaml in Y minutes概述在 yaml 中声明字符串的不同解决方案以及它们支持的不同类型的转义。
关于bash - 在ansible中转义特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65183954/