BashスクリプトのEOF文はIF文では実行されません。

BashスクリプトのEOF文はIF文では実行されません。

私の文法にどんな問題があるのか​​疑問に思います。

この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」というメッセージが表示され、入力を待つだけです。私がそのようなものを入力したりコマンドを実行したりすると、最後に入力したものは接続を閉じて印刷しますが、lsEOFのコマンドはいつでも実行されません。pwdbye"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

結局、接続できない場合は、コマンドを送っても送らなくても構いませんので、とにかく送ってください。

関連情報