私の文法にどんな問題があるのか疑問に思います。
このbashスクリプトを実行すると、期待どおりに動作し、すべてのコマンドが実行されます。
sftp -i ~/.ssh/my_private_key $username@$host <<EOF
lcd /home/documents
get *
bye
EOF
しかし、IF内にEOFを入れようとすると失敗します。
sftp -i ~/.ssh/my_private_key $username@$host
if [[ $? != 0 ]]; then
echo "SFTP connection failed to establish."
exit 10
else <<-EOF
lcd /home/documents
get *
bye
EOF
echo "Files moved and connection closed."
fi
exit 0
何が起こるのかは、端末に「Connected to $host」というメッセージが表示され、入力を待つだけです。私がそのようなものを入力したりコマンドを実行したりすると、最後に入力したものは接続を閉じて印刷しますが、ls
EOFのコマンドはいつでも実行されません。pwd
bye
"Connection closed."
答え1
sftp
リダイレクトはコマンドに適用され、if
次のようになります。
if sftp -i ~/.ssh/my_private_key $username@$host <<-EOF
lcd /home/documents
get *
bye
EOF
then
echo "Files moved and connection closed."
else
echo "SFTP connection failed to establish."
exit 10
fi
結局、接続できない場合は、コマンドを送っても送らなくても構いませんので、とにかく送ってください。