Ansible 使用正则表达式匹配并更改 bash 提示符

Ansible 使用正则表达式匹配并更改 bash 提示符

我想将 bash 命令提示符字符串从

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

具体来说,就是通过将 32 改为 31,将颜色从绿色改为红色。

我想更改文件而不是部署/复制完整文件。

我想搜索整个文件,如果它符合任一情况则更改该行。

我尝试转义所有特殊字符,但 YAML 正则表达式对 \ 和各种字符提出投诉。

答案1

即使这张罚单已经两年多了,我还是发现自己处于同样的情况。

我尝试了一下并找到了解决这一挑战的方法

  - name: Set default color in bash
lineinfile:
  path: /home/example-user/.bashrc
  regexp: "^    PS1='\\${debian_chroot:\\+\\(\\$debian_chroot\\)}\\\\\\[\\\\033\\[01;32m\\\\\\]\\\\u@\\\\h\\\\\\[\\\\033\\[00m\\\\\\]:\\\\\\[\\\\033\\[01;34m\\\\\\]\\\\w\\\\\\[\\\\033\\[00m\\\\\\]\\\\\\$ '"
  line: "    PS1='${debian_chroot:+($debian_chroot)}\\[\\033[01;32m\\]\\u\\[\\033[01;32m\\]@\\h\\[\\033[00m\\]:\\[\\033[01;34m\\]\\w\\[\\033[00m\\]\\$ '"
  backup: yes
when: ansible_os_family == "Debian"

希望这也能帮助其他人。

答案2

为什么不直接将 PS1 设置为所需值?

- lineinfile:
    create: yes
    mode: 0600
    dest: /root/.bash_aliases
    owner: root
    regexp: '^PS1='
    line: 'PS1="${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "'
    state: present

我使用单引号作为外引号,因为它不需要转义字符。

答案3

@Mrk 的答案稍微简洁一些:

- name: "Set Bash prompt color"
  ansible.builtin.lineinfile:
    path: "~/.bashrc"
    search_string: "    PS1='${debian_chroot:+($debian_chroot)}\\[\\033[01;32m\\]\\u@\\h\\[\\033[00m\\]:\\[\\033[01;34m\\]\\w\\[\\033[00m\\]\\$ '"
    line: "    PS1='${debian_chroot:+($debian_chroot)}\\[\\033[01;31m\\]\\u@\\h\\[\\033[00m\\]:\\[\\033[01;34m\\]\\w\\[\\033[00m\\]\\$ '"

相关内容