나는 예상을 사용하여 bash 스크립트를 작성하려고합니다. Bash 스크립트는 원격 서버에 상주하며 나중에 날짜/시간에 실행됩니다. 나는 대용량 데이터 파일을 읽고, 처리를 수행하고, 적절한 값을 사용하여 bash 스크립트를 작성하기 위해 Expect를 사용하고 있습니다. 이를 위해 bash 스크립트의 값을 보관할 변수를 설정했습니다.
set awk_cmd "awk '\{print \\\$3\}'"
if {$reboot==$reboot_N} {
set command5 "echo '#!/bin/bash\n\ndeclare -i last_reboot=\$(w | grep up | grep days | ${awk_cmd})\n\nif (( \$last_reboot !< 8 )); then\necho \"Your ..."' > /root/script.sh
분명히 echo 명령의 상당 부분을 편집했습니다. 그러나 제가 받은 오류는 ${awk_cmd} 섹션에 있습니다. awk는 "awk '{print $3}'" 형식을 사용합니다.
그러나 bash 스크립트에는 작은따옴표를 인쇄할 수 없습니다. 위의 내용은 따옴표 없이 {print $3}를 인쇄하고 awk 명령에서 작은 따옴표를 이스케이프하려는 모든 시도는 실패합니다.
큰 따옴표와 작은 따옴표를 사용했습니다. 내 명령의 모든 것은 awk 명령을 제외하고 작동합니다.
내가 무엇을 놓치고 있나요?
편집: 더 간단하게 만들기 위해(희망합니다) 작은따옴표로 묶인 문자열 안에 리터럴 작은따옴표를 전달해 보았습니다.
답변1
나는 그것을 알아낸 것 같아요.
set command5 "echo '#!/bin/bash\n\ndeclare -i last_reboot=\$(w | grep up | grep days | awk '\\\''\{print \$3\}'\\\'')\n\nif....." > script.sh
위의 결과는 다음과 같습니다.
#!/bin/bash
declare -i last_reboot=$(w | grep up | grep days | awk '{print $3}')
if (( $last_reboot >= 7 )); then
echo "Your ..."
나는 답을 찾았다여기. 아직 올바른 탈출 순서를 찾지 못했습니다.