반응형

python도 그렇고, windows도 그렇고 escape처리가 다른 언어 및 OS에 비해 까다롭기 때문에, win_command 처럼 문자열을 많이 입력해야 하는 모듈의 경우 escape 처리에 신경을 많이 써야 한다.

 

msi 파일 등을 무인 설치 하고, 설치된 디렉토리에 가서 뭔가 명령어를 입력해야 하는 경우, C:\Program Files 같이 중간에 띄어쓰기가 있는 경우 최근에 삽집을 했기 때문에 해당 내용에 대해 정리함.

 

C:\Program Files\Abc eef 경로에 있는 execute.cmd를 -r argument까지 넣어서 실행해야 하는 경우 아래와 같이 하면 문제가 없다. (참고로 win_shell 모듈 사용의 경우에는 powershell 기반이라 그런지 첫 글자에 \가 붙어서 문제가 발생하게 된다.)

---
 - name: test escape string
   win_command: '"C:\Program Files\Abc eef\execute.cmd" -r'

 

다음 예시로, 위와 동일한 경로에서 argument까지 넣어서 실행 한 후 추가 argument에 ansible_fact에서 가져온 정보까지 넣어야 하는 경우 아래와 같이 하면 된다.

---
 - name: test escape string with ansible_facts
   win_command: '"C:\Program Files\Abc eef\execute.cmd" -r {{ ansible_facts["hostname"] }}'

 

두 개의 예시를 보면 알겠지만, 띄어쓰기가 포함된 경로는 Double quote로 묶어주는 것이 핵심이고, 경로만 묶는 것이 아닌 실행파일까지 한 번에 묶는 것이 중요하다. 그리고 전체 커맨드를 Single quote로 묶어주는 것도 중요하며, ansible_facts를 기본적으로 Single quote로 많이 사용하는 데, 전체 커맨드를 Single quote로 묶어준 경우 Double quote로 바꿔서 사용해도 문제가 없다.

반응형
,