원격 SSH 호스트의 Case 문에서 heredoc 사용

원격 SSH 호스트의 Case 문에서 heredoc 사용

원격 서버에서 실행할 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}"거기에서도 사용하고 싶을 수도 있습니다 .

관련 정보