如何在从文件读取时读取while循环内的输入?

时间:2017-09-22 21:44:58

标签: bash shell terminal

我是新手来编写脚本,这就是我要做的事情:

1 - 读取文件 - 此文件是名称列表 2 - 询问用户是否要删除{name} 3 - 如果用户输入y,请继续

这是我的脚本到目前为止所看到的:

while IFS= read -r repo 
    do
        read -p "Do you want to delete $repo" ip 
        echo $ip
        if [ "$ip" == "y" ]
            then
            #do something
        fi

    done < "$filename"

read -p行不会等待用户提示。我有点理解问题是什么/在哪里,我试图通过阅读这个链接来解决问题 - https://bash.cyberciti.biz/guide/Reads_from_the_file_descriptor_(fd)

但不知怎的,我无法解决这个问题。我究竟做错了什么?请帮忙!

2 个答案:

答案 0 :(得分:4)

为指定文件使用不同的文件描述符。您知道数据的来源;你不知道标准输入可能被重定向到哪里,所以不管它。

while IFS= read -r -u 3 repo   # Read from file descriptor 3
do
    read -p "Do you want to delete $repo" ip   # Read from whatever standard input happens to be
    echo "$ip"
    if [ "$ip" = "y" ]
    then
        #do something
    fi 
done 3< "$filename"  # Supply $filename on file descriptor 3

-u具体为bash,但我注意到您已使用其他bash特定功能-p选项read。从标准输入以外的东西读取的POSIX方式是IFS= read -r repo <&3(表示将文件描述符3复制到此命令的标准输入上)。

答案 1 :(得分:2)

看到这个问题:

Does bash support doing a read nested within a read loop?

基本上,您通过标准输入读取文件,这与输入时的输入流相同,因此当您提示用户时,脚本会将文件的输入视为用户&# 39; s输入。如果你在另一个输入流中读入文件,那么它就不会覆盖。