リモートサーバーで実行する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
2行目とその行の前にはハードタブを使用する必要がありhi, hello
、stackexchangeはタブを空白に変更するため、直接コピーして貼り付けが機能しません。。これは、<<-
ここで文書データを避けて左端に押し込むという主張かもしれません。
また、read ls_host; ssh -t ${ls_host}
ユーザーがssh
ホスト名を入力するときに必要なオプションを入力することも、そうでない場合もあるオプションを入力することもできます。"${ls_host}"
そこでも使用したいかもしれません。