Ansible -m 쉘 및 찾기 명령

Ansible -m 쉘 및 찾기 명령

이 문제를 해결하는 방법을 아는 사람이 있나요?

ansible -m shell -i test.txt -a "sudo find / -regex '.*\(tar\|zip\)$' -type f 2>/dev/null | while read i; do echo $i; done"

문제는 "while" 부분에 있습니다. 아무런 결과도 표시되지 않습니다. Bash에서 직접 실행하면 모든 것이 정상입니다.

findunzip( , 및 찾은 파일에 대해 다양한 작업을 수행하기 때문에 이 "while" 부분이 필요합니다 grep.)

감사해요

답변1

큰따옴표 안에 표시되므로 $i명령 문자열의 일부로 전달되기 전에 확장(비어 있음)됩니다. ansible이스케이프해야 합니다 ... do echo \$i; ....

그런데 기술적으로는 $정규식의 일부인 백슬래시에 대해 동일한 작업을 수행해야 합니다(예: ) . 그 뒤의 문자는 이스케이프 정의 시퀀스 또는 확장 문자 '.*\\(tar\\|zip\\)\$'로 해석되지 않기 때문에 실제로 그렇게 할 필요는 없습니다. $그래서 쉘은 이를 무시하지만 "그냥 작동하는" 구문을 사용하면 항상 불안해집니다.

답변2

첫 번째 답변에 대해서는 탈출 $i하여 \$i올바르게 실행되도록 하세요.

ansible test --user ${ACCOUNT} --ask-pass --become --module-name shell --args "find /home/{{ ansible_user }} -regex '.*\(tar\|zip\)$' -type f 2>/dev/null | while read i; do echo \$i; done"

sudo쉘 매개변수에서 사용하는 대신 ,--become더 나은 접근 방식이 될 수 있습니다.

~에 대한

Bash에서 직접 실행하면 모든 것이 정상입니다.

내가 Ansible을 이해하는 한shell비슷한 작업을 수행하는 모듈입니다 /bin/sh -c. Bash가 필요한 경우 예제를 통해 사용할 수 있습니다 --args "/bin/bash -c '...'".

감사해요

관련 정보