比较文件文件,提示不要求输入

时间:2018-09-19 07:54:04

标签: bash input compare prompt

我正在从远程服务器下载文件。这部分工作正常,但现在我正在尝试将远程文件大小与本地文件大小进行比较。

如果两者不匹配,那么我想提示用户输入yes or no

我已经添加了read命令,但是脚本永远不会暂停并询问问题。为什么?

这是我的测试代码

while IFS=',' read -r downloadfiles; do


        case "$downloadfiles" in
        AA)
            filetoget="$downloadfiles.tar.gz"
            ;;
        BB)
            filetoget="$downloadfiles.zip"
            ;;                      
        esac


        sizeoffile=`curl -sI "http://server.com/$filetoget" | awk '/Content-Length/{sub("\r","",$NF); print $NF}'`
        curl -O http://server.com/$filetoget

        localsizeoffile=`stat --print="%s" $filetoget`

        if [ "$localsizeoffile" -ne "$sizeoffile" ]; then
            echo "error..."

            read -p "Continue (y/n)?" CONT
                if [ "$CONT" = "y" ]; then
                    echo "yaaa";
                else
                    echo "booo";
                fi
            fi

done < filelist

谁能告诉我我做错了什么。谢谢

更新.. 我故意将其设置为本地文件大小,以便测试。.我收到错误error...,但没有提示询问他们是否要继续..任何想法

固定错字

2 个答案:

答案 0 :(得分:2)

You can use this (inspired by dank's answer):

read -p "Continue (y/n)?" CONT </dev/tty

答案 1 :(得分:2)

这是因为循环内的read也将 从标准输入中读取,而标准输入是从filelist重定向的。一种标准的方式(在Bash中)是使用另一个文件描述符进行filelist的重定向:

# Read from file descriptor 10: see end of loop, 10 is the redirection of filelist
while IFS=, read -u 10 -r downloadfiles; do
    # ...
    if (( localsizeoffile != sizeoffile )); then

        echo "error..."

        # This will read from standard input
        read -p "Continue (y/n)?" cont
        if [[ $cont = y ]]; then
            echo "yaaa"
        else
            echo "booo"
        fi
    fi

# Redirect filelist to file descriptor 10
done 10< filelist