bash 脚本中的 EOF 语句不会在 IF 语句中执行

bash 脚本中的 EOF 语句不会在 IF 语句中执行

想知道我的语法有什么问题。

运行此 bash 脚本将按预期工作,并且所有命令都会执行:

sftp -i ~/.ssh/my_private_key $username@$host <<EOF
lcd /home/documents
get *
bye
EOF

然而,尝试将 EOF 放入 IF 内部会导致其无法执行:

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

所发生的一切是我在终端中看到“已连接到 $host”消息,然后等待输入。如果我键入任何类似lspwd它们执行的命令,最后键入bye将关闭连接并打印"Connection closed.",但 EOF 中的命令在任何时候都不会执行。

答案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

毕竟,如果连接未能建立,发送或不发送命令并不重要,所以无论如何都要发送它们。

相关内容