我从PowerShell运行这个,所以我不知道这是否会发生在不同的环境(正则expression式本身只包括除了那些以“amq。”开头的东西)。
当我运行下面的命令,'^'从模式中删除:
rabbitmqctl set_policy mirroring '^(?!(?:amq\.)).+$' '{"""ha-mode""":"""all"""}'
它输出以下内容:
Setting policy "mirroring" for pattern "(?!(?:amq\\.)).+$" to "{\"ha-mode\":\"all\"}" with priority "0" ...
我尝试过以不同的方式逃脱它,没有任何成功。 有趣的是,从networkingpipe理插件设置它工作正常。
UPDATE
这个问题似乎与^在batch file(我认为)中是一个保留的字符有关,并且就batch file而言并没有被引用(即,PS需要传入引用string中的模式,但它是按原样传递正则expression式)。 基于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\"}'
如果您指定了一个值的数组,它会自动将它们扩展为单独的参数。
& rabbitmqctl @('set_policy mirroring', '^(?!(?:amq\.)).+$', '{ha-mode:all}')
使用
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}'
…您可以使用
--%运算符,它告诉PowerShell停止从该点开始parsing,直到行结束。 从那个运算符开始的所有东西都被程序使用的parsing器parsing。
rabbitmqctl --% set_policy mirroring ^(?!(?:amq\.)).+$ {ha-mode:all}
参考: