Powershell
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" ...
我試過以不同的方式逃避它,但沒有任何成功。有趣的是,從 web 管理外掛設置它工作正常。
更新
這個問題似乎與
^
批處理文件中的保留字元(我認為)有關,並且就批處理文件而言沒有被引用(即 PS 需要為模式傳遞帶引號的字元串,但它正在傳遞在正則表達式中)。以下任何工作,基於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\"}'
PS 2.0 及更高版本:
如果您指定一個值數組,它會自動將它們展開為單獨的參數。
& rabbitmqctl @('set_policy mirroring', '^(?!(?:amq\.)).+$', '{ha-mode:all}')
使用
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 及更高版本:
…您可以使用
--%
告訴 PowerShell 從該點開始直到行尾停止解析的運算符。從該運算符開始的所有內容都由程序使用的解析器解析。rabbitmqctl --% set_policy mirroring ^(?!(?:amq\.)).+$ {ha-mode:all}
參考: