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

rabbitmqctl set_policy удаляет привязку каретки (^) из шаблона регулярного выражения

Я запускаю это из PowerShell, поэтому я не уверен, произойдет ли это в другой среде (само регулярное выражение просто включает все, кроме тех, которые начинаются с «amq.»).

Когда я запускаю следующую команду, '^' удаляется из шаблона:

rabbitmqctl set_policy mirroring '^(?!(?:amq\.)).+$' '{"""ha-mode""":"""all"""}'

Он выводит следующее:

Setting policy "mirroring" for pattern "(?!(?:amq\\.)).+$" to "{\"ha-mode\":\"all\"}" with priority "0" ...

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

ОБНОВИТЬ

Проблема, похоже, связана с ^ является зарезервированным символом в пакетных файлах (я думаю) и не цитируется в пакетном файле (т.е. PS должен передать строку в кавычках для шаблона, но он передавался в регулярном выражении как есть). Любая из следующих работ, основанная на биткракерответ:

rabbitmqctl set_policy mirroring '"^(?!(?:amq\.)).+$"' '{\"ha-mode\":\"all\"}'

rabbitmqctl --% set_policy mirroring "^(?!(?:amq\.)).+$" {\"ha-mode\":\"all\"}

rabbitmqctl @('set_policy','mirroring','"^(?!(?:amq\.)).+$"','{\"ha-mode\":\"all\"}')

Start-Process -FilePath 'rabbitmqctl' -ArgumentList 'set_policy mirroring "^(?!(?:amq\.)).+$" {\"ha-mode\":\"all\"}'

PS 2.0 и выше:

Если вы укажете массив значений, он автоматически расширит их на отдельные параметры.

& rabbitmqctl @('set_policy mirroring', '^(?!(?:amq\.)).+$', '{ha-mode:all}')

С помощью Start-Process командлет.

Start-Process -FilePath 'rabbitmqctl' -ArgumentList 'set_policy mirroring ^(?!(?:amq\.)).+$ {ha-mode:all}'

# Same as above, shortened using aliases and positional parameters

start rabbitmqctl 'set_policy mirroring ^(?!(?:amq\.)).+$ {ha-mode:all}'
saps rabbitmqctl 'set_policy mirroring ^(?!(?:amq\.)).+$ {ha-mode:all}'

PS 3.0 и выше:

... вы можете использовать --% оператор, который сообщает PowerShell, что нужно прекратить синтаксический анализ с этого момента до конца строки. Все, начиная с этого оператора, анализируется парсером, используемым программой.

rabbitmqctl --% set_policy mirroring ^(?!(?:amq\.)).+$ {ha-mode:all}

Ссылка: