shell脚本中的EOF问题

Leo*_*eon 3 linux bash shell

以下代码段给出错误:14:语法错误:文件意外结束

#!/bin/bash
func_some()
{
    cd some_directory
    lftp -u user,'password' sftp://192.168.xx.xx <<EOF
    cd some_directory
    mget ADMS_report_*${2}${3}${4}*.txt
}
#------------------------------ Main function ------------------------------
func_some 2017 08 08 2017 08 07
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除<<EOFthen 脚本只是登录但不执行后续命令并无限期地保持登录状态。

有什么办法可以解决这个问题?我犯了什么错误?

zep*_*lin 5

<<EOF指示的开始定界符

Here 文档是一个特殊用途的代码块。它使用一种 I/O 重定向形式将命令列表提供给交互式程序或命令,例如 ftp、cat 或 ex 文本编辑器。

然后您应该关闭您的 heredoc 代码块,如下所示:

func_some() 
{
    cd some_directory
    lftp -u user,'password' sftp://192.168.xx.xx <<EOF
    cd some_directory
    mget ADMS_report_*${2}${3}${4}*.txt
EOF
}
Run Code Online (Sandbox Code Playgroud)

否则它将继续搜索限制字符串 ( EOF),并在到达文件末尾时因语法错误而失败。

请注意,限制字符串必须放在行首,前面不能有空格。