我想将 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\\]\\$ '"