Rabbitmqctl set_policy는 정규식 패턴에서 캐럿(^) 앵커를 삭제합니다.

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" ...

나는 성공하지 못한 채 다양한 방법으로 탈출을 시도했습니다. 흥미롭게도 웹 관리 플러그인에서 설정하면 제대로 작동합니다.

업데이트

^이 문제 는 배치 파일에 예약된 문자가 있고(내 생각에는) 배치 파일에 관한 한 인용되지 않은 것과 관련이 있는 것 같습니다. 즉, 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}')

cmdlet을 사용합니다 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}

참조:

관련 정보