rabbitmqctl set_policy descarta âncora de circunflexo (^) do padrão regex

1

Estou executando isso no PowerShell, por isso não tenho certeza se isso aconteceria em um ambiente diferente (o próprio regex inclui apenas tudo, exceto aqueles que começam com 'amq').

Quando executo o seguinte comando, o '^' é eliminado do padrão:

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

Produz o seguinte:

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

Eu tentei escapar de formas diferentes sem sucesso. Curiosamente, configurá-lo a partir do plug-in de gerenciamento da Web funciona bem.

UPDATE

O problema parece estar relacionado ao ^ ser um caractere reservado em arquivos batch (eu acho), e não ser citado no que diz respeito ao arquivo em lote (ou seja, PS precisa passar uma string entre aspas para o padrão, mas estava passando no regex como está). Qualquer um dos seguintes trabalhos, com base na resposta do beatcracker :

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\"}'
    
por Andrew 14.10.2015 / 02:28

1 resposta

2

PS 2.0 e superior:

If you specify an array of values, it will automatically expand them into separate parameters.

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

Using Start-Process cmdlet.

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

...you can use the --% operator which tells PowerShell to stop parsing from that point onward until the end of the line. Everything from that operator onwards is parsed by the parser used by the program.

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

Referência:

por 29.10.2015 / 20:58