【问题标题】:Problems uploading file within a do while loop在 do while 循环中上传文件的问题
【发布时间】:2015-06-09 03:25:46
【问题描述】:

您好,我有一段代码不断提示“语法错误:文件意外结束”。下面是代码示例。我可以知道它有什么问题吗?因为我需要做一个比较然后上传代码。

下载文件的第一部分代码没有问题。但是第二部分只是拒绝移动

ftp -in << END_DL
open $ftp_site
user $username $password

cd $REMOTE_FOLDER
get $FILE_NAME

close 
bye
END_DL

declare -a folders=( $(cat $LOCAL_FOLDER/files.json | jq '.files' | jq 'keys' | jq '.[]') )
diffFiles=()
for folder in "${folders[@]}"
do
    declare -a files=( $(cat $LOCAL_FOLDER/files.json | jq '.files.'${folder} | jq 'keys' | jq '.[]') )
    for file in "${files[@]}"
    do
        # echo "$(cat $LOCAL_FOLDER/files.json | jq '.files.'${folder}'['${file}']')"
        # Compare with the remote file json
        a=$(cat $LOCAL_FOLDER/files.json | jq '.files.'${folder}'['${file}']')
        b=$(cat $FILE_NAME | jq '.files.'${folder}'['${file}']')

        if [[ "$a" == "$b" && -n $a ]]
        then
            echo "Equal"
        else
            echo "$file in ${folder} folder Not Equal. Transferring file now"
            folder=${folder:(1)}
            folder=${folder%?}
            file=${file:(1)}
            file=${file%?}
            diffFiles+=$folder/$file
            ftp << END_UL
            close
            bye
            END_UL
        fi
    done
done

【问题讨论】:

    标签: bash ftp


    【解决方案1】:

    Here-docs(与&lt;&lt; 一样)对结束标记的缩进非常挑剔。如果缩进与指定的不同,则不会将其识别为结束标记,并且您会收到与您所看到的完全相同的错误消息。

    最快的解决方法可能是使用 &lt;&lt;- 而不是 &lt;&lt; - 该变体会从 here-doc 行1 中剥离所有前导制表符,包括结束标记的制表符,这意味着您可以更自然地缩进(否则,结束标记必须位于行首)。

    换句话说,这是错误的(.___ 序列表示一个制表符):

    .___.___ftp <<END_UL
    .___.___.___close
    .___.___.___bye
    .___.___END_UL
    

    但其中任何一个都可以:

    .___.___ftp <<END_UL     .___.___ftp <<-END_UL
    .___.___.___close        .___.___.___close
    .___.___.___bye          .___.___.___bye
    END_UL                   .___.___END_UL
    

    您也可以使用其他方法来达到相同的效果,例如:

    (
        echo close
        echo bye
    ) | ftp
    

    或:

    printf "close\nbye" | ftp
    

    如果您不想关注 here-docs。


    1 显然,如果您想要在输入流中使用前导选项卡,那么这将不起作用,但至少在这种情况下,情况似乎并非如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      相关资源
      最近更新 更多