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

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\"}'

решение1

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}

Ссылка:

Связанный контент