bash - 在ansible中转义特殊字符

标签 bash ansible

需要转义 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/

    相关文章:

    macos - 安装后找不到 Gulp 命令

    java - 编写 bash 脚本来使用命令行参数运行 java 程序?

    bash - 在所有子文件夹中创建空文件

    linux - 是否可以在Linux命令行中使用 "py"代替 "python"?

    linux - 根据唯一时间戳对目录中的文件进行排序并将它们分组

    yaml - 如何以正确的方式将变量分配给 Ansible 中的另一个变量?

    docker - 使用 Ansible docker_image 构建 Docker

    substring - Jinja2模板中的条件子字符串

    pip - 使用 Ansible pip 模块安装 python 软件包时出现问题

    dictionary - Ansible - 根据列表中的匹配项创建新字典