Expect 스크립트의 send 명령에 특수 문자 " 및 `를 사용하십시오.

Expect 스크립트의 send 명령에 특수 문자 " 및 `를 사용하십시오.

모든 서버에서 루트 비밀번호를 재설정해야 하는 명령을 실행하려고 Linux 서버에서 명령을 실행하려고 합니다. 자동화하기 위해 예상 스크립트를 사용하는 서버가 여러 개 있기 때문에 명령에는 큰따옴표 및 악센트와 같은 특수 문자가 포함되어 있습니다 `. 따라서 실행하는 동안 큰따옴표 뒤에 추가 문자가 오류로 표시됩니다.

send " chage -l root | grep -i "Password expires" | if [[ `awk -F : '{print $2}' ` = "never" ]] ; then echo "password needs to be changed " ;else echo "skipping reset " ; fi;\r"

큰따옴표를 사용해 보았지만 \오류는 동일합니다.

답변1

보간 없이 문자열을 원하는 경우탈륨{}(예상되는 언어가 있음) 확장할 문자나 변수가 없으면 다음 {}과 같이 묶습니다.

send { chage -l root | grep -i "Password expires" | if [[ `awk -F : '{print $2}' ` = "never" ]] ; then echo "password needs to be changed " ;else echo "skipping reset " ; fi;}
send \r

답변2

백슬래시를 어디에 넣었나요? 모든 참조에 적용됩니까, 아니면 이와 같은 내부 참조에만 적용됩니까?

send " chage -l root | grep -i \"Password expires\" | if [[ `awk -F : '{print \$2}' ` = \"never\" ]] ; then echo \"password needs to be changed \" ;else echo \"skipping reset \" ; fi;\r"

예, 해당 문자열이 명령에 전달되고 너무 일찍 구문 분석할 필요가 없으므로 문자가 \하나 더 필요합니다 .$bash

관련 정보