Назад | Перейти на главную страницу

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

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

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

  - 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

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