リモート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

EOF2行目とその行の前にはハードタブを使用する必要がありhi, hello、stackexchangeはタブを空白に変更するため、直接コピーして貼り付けが機能しません。。これは、<<-ここで文書データを避けて左端に押し込むという主張かもしれません。


また、read ls_host; ssh -t ${ls_host}ユーザーがsshホスト名を入力するときに必要なオプションを入力することも、そうでない場合もあるオプションを入力することもできます。"${ls_host}"そこでも使用したいかもしれません。

関連情報