shell脚本中的EOF问题

时间:2017-08-08 07:03:42

标签: 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

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

这可能是什么解决方案?我犯了什么错误?

1 个答案:

答案 0 :(得分:4)

<<EOF表示heredoc

的开头
  

此处的文档是一个专用代码块。它使用一种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
}

否则它将继续搜索限制字符串(EOF), 当文件结束时,语法错误失败。

请注意,限制字符串必须放在行的开头, 在它前面没有空格。