想知道我的语法有什么问题。
运行此 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”消息,然后等待输入。如果我键入任何类似ls
或pwd
它们执行的命令,最后键入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
毕竟,如果连接未能建立,发送或不发送命令并不重要,所以无论如何都要发送它们。