Я запускаю это из 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}
Ссылка: