Rabbitmqctl set_policy elimina el ancla de intercalación (^) del patrón de expresiones regulares

Rabbitmqctl set_policy elimina el ancla de intercalación (^) del patrón de expresiones regulares

Estoy ejecutando esto desde PowerShell, por lo que no estoy seguro de si esto sucedería en un entorno diferente (la expresión regular en sí incluye todo excepto aquellos que comienzan con 'amq.').

Cuando ejecuto el siguiente comando, el '^' se elimina del patrón:

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

Produce lo siguiente:

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

Intenté escapar de diferentes maneras sin éxito. Curiosamente, configurarlo desde el complemento de administración web funciona bien.

ACTUALIZAR

El problema parece estar relacionado con ^ser un carácter reservado en archivos por lotes (creo) y no estar entre comillas en lo que respecta al archivo por lotes (es decir, PS necesita pasar una cadena entre comillas para el patrón, pero estaba pasando en la expresión regular tal como está). Cualquiera de los siguientes trabajos, basados ​​enrompe beatsLa respuesta de:

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

Respuesta1

PS 2.0 y superior:

Si especifica una matriz de valores, los expandirá automáticamente en parámetros separados.

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

Usando Start-Processcmdlet.

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 y superior:

...puede utilizar el --%operador que le indica a PowerShell que deje de analizar desde ese punto en adelante hasta el final de la línea. Todo, desde ese operador en adelante, es analizado por el analizador utilizado por el programa.

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

Referencia:

información relacionada