Ansible ad-hoc 명령 출력을 실행하여 생성된 awk 명령을 제안해야 함

Ansible ad-hoc 명령 출력을 실행하여 생성된 awk 명령을 제안해야 함

Ansible ad-hoc 명령을 사용하여 다음 명령을 실행하여 인덱스 ID를 찾으면:

$ ansible oamvip -i /storage/inventory/None/${myvnf}hosts --become -m shell -a "/usr/sbin/aladmin list | grep "PartitionUsage" | awk '{ print \$2 }'"
xxx.xx.xxx.xxx | CHANGED | rc=0 >>
4818b4715eb6542838023
e520bec15eb6542838023 

sh그러나 출력에서 ​​셸 명령( )을 실행하려고 하면 awkAnsible이 도움말 메뉴를 표시합니다.

$ ansible oamvip -i /storage/inventory/None/${myvnf}hosts --become -m shell -a "/usr/sbin/aladmin list | grep "PartitionUsage" | awk '{ print "aladmin show " \$2 | "sh"}'"
Usage: ansible <host-pattern> [options] 

작은 따옴표, 큰 따옴표, 백슬래시를 시도했지만 아무 소용이 없습니다. 조언해주세요.

답변1

"/usr/sbin/aladmin list | grep "PartitionUsage" | awk '{ print \$2 }'"

전체 명령줄을 구문 분석하는 쉘의 관점에서 이것은 단지 문자열(단어)일 뿐입니다. 나는 그것이 귀하의 질문과 무관하게 전달되었다고 가정 sh -c합니다.

"/usr/sbin/aladmin list | grep \"PartitionUsage\" | awk '{ print \$2 }'"

또는

"/usr/sbin/aladmin list | grep PartitionUsage | awk '{ print \$2 }'"

대신에.

set -x
: "/usr/sbin/aladmin list | grep "PartitionUsage" | awk '{ print "aladmin show " \$2 | "sh"}'"
+ : '/usr/sbin/aladmin list | grep PartitionUsage | awk '\''{ print aladmin' show ' $2 | sh}'\'''

이는 쉘을 나타내는 세 단어이므로 ansible쉘은 이러한 매개변수를 이해하지 못합니다.

또 그거 ".

awk '{ print "aladmin show " \$2 | "sh"}'

되어야 한다

awk '{ print \"aladmin show \" \$2 | \"sh\"}'

그런데

(거의 일반적이지만 특히 이 경우) 이유 없음

... | grep ... | awk ...

파이프라인은 (PCRE와 같은 몇 가지 예외를 제외하고) 할 수 있는 awk모든 작업을 수행할 수 있습니다 grep.

grep PartitionUsage | awk '{ print \$2 }'

=>

awk '/PartitionUsage/ { print \$2 }'

관련 정보