Синтаксис sed не работает с Ansible модулем оболочки - PullRequest
0 голосов
/ 11 февраля 2020

I sh, чтобы проверить, существует ли мой текст Options между открывающими и закрывающими тегами LocationMatch. Ниже sed команда дает мне желаемый результат.

$ sed -n '/^<LocationMatch "^\/+$">/,/^<\/LocationMatch/p' httpd.conf |  grep -i 'Options '
 Options -Indexes

Однако я получаю синтаксическую ошибку при выполнении той же команды из ansible.

- name: Check if Options exists between Location Match tags
  shell: "sed -n '/^<LocationMatch \"^\/+$\">/,/^<\/LocationMatch/p' {{ httpd_home }}/conf/httpd.conf |  grep -i 'Options '"
  register: Optionsexist

Вывод:

      shell: "sed -n '/^<LocationMatch \"^\/+$\">/,/^<\/LocationMatch/p' {{ httpd_home }}/conf/httpd.conf |  grep -i 'Options '"
                                          ^ here
We could be wrong, but this one looks like it might be an issue with
missing quotes. Always quote template expression brackets when they
start a value. For instance:

    with_items:
      - {{ foo }}

Should be written as:

    with_items:
      - "{{ foo }}"

Я сохранил escape-символ ansible перед двойными кавычками в команде sed.

Подскажите, пожалуйста, рабочий синтаксис.

1 Ответ

0 голосов
/ 11 февраля 2020

С предложением User @Zeitounators приведенный ниже форматированный код с escape-символами помог преодолеть синтаксическую ошибку.

- name: Check if Options exists between Location Match tags
  shell: "sed -n '/^<LocationMatch \"^\\/+$\\">/,/^<\/LocationMatch/p' {{ httpd_home }}/conf/httpd.conf |  grep -i 'Options '"
  register: Optionsexist
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...