![원격 SSH 호스트의 Case 문에서 heredoc 사용](https://linux55.com/image/204906/%EC%9B%90%EA%B2%A9%20SSH%20%ED%98%B8%EC%8A%A4%ED%8A%B8%EC%9D%98%20Case%20%EB%AC%B8%EC%97%90%EC%84%9C%20heredoc%20%EC%82%AC%EC%9A%A9.png)
원격 서버에서 실행할 SSH 명령 목록이 있으므로 이 코드 조각을 작성했습니다.
#!/usr/bin/env bash
echo ''
echo "WOULD YOU LIKE TO PERFORM FILES CLEANUP: "
read choice
case $choice in
yes|YES|y|Y )
echo ''
echo "Enter NAME OR IP OF REMOTE HOST: "
read ls_host
ssh -t ${ls_host} <<- IFF
command 1
command 2
command 3
IFF;;
* )
echo "YOU'VE MADE A WISE-CHOISE: SCRIPT IS SKIPPING CLEANUP";;
esac
아래 오류
warning: here-document at line # delimited by end-of-file (wanted `IFF')
IFF 관련해서 인용도 해봤는데
답변1
Here-docs는 입력 라인만을 기반으로 일반 구문 "외부"에서 수집됩니다. 따라서 here-doc 구분 기호를 별도의 줄에 배치해야 하며 이를 다른 구문과 결합할 수 없습니다. 또한 here-doc 구분 기호 자체에는 다음과 같은 구문 요소가 포함될 수 있습니다 ;;
.
예를 들어, 이는 wat
및 를 인쇄해야 합니다 hi, hello
.
#!/bin/sh
cat << "EOF;;"
wat
EOF;;
case x in
x) cat <<-EOF
hi, hello
EOF
;;
y) false;;
esac
EOF
두 번째 줄 과 해당 줄 앞에는 하드 탭을 사용해야 하며 hi, hello
, stackexchange는 탭을 공백으로 변경하므로,직접 복사하여 붙여넣기가 작동하지 않습니다.. 이는 <<-
여기 문서 데이터를 피하고 왼쪽 가장자리로 밀어 넣으라는 주장일 수도 있고 아닐 수도 있습니다 .
또한 read ls_host; ssh -t ${ls_host}
사용자가 ssh
호스트 이름을 입력할 때 원하는 옵션을 입력할 수도 있고 아닐 수도 있는 옵션을 입력할 수 있습니다. "${ls_host}"
거기에서도 사용하고 싶을 수도 있습니다 .