Сопоставить и изменить приглашение 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 жаловалось на \ и различные символы.

3 ответа

Даже если этому билету больше двух лет, я оказался в такой же ситуации.

Я немного попробовал и нашел решение этой проблемы

  - 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"

Надеюсь, это поможет и другим.

Почему бы просто не установить 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

Я использовал одинарные кавычки как внешние, так как для этого не требуется экранировать символы.

Немного более чистая версия ответа @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\\]\\$ '"
Другие вопросы по тегам