簡體   English   中英

從文件讀取時如何在while循環中讀取輸入?

[英]How to read input inside a while loop while reading from a file?

我對bash腳本非常陌生,這是我想要做的事情:

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)

但是不知何故我無法解決此問題。 我究竟做錯了什么? 請幫忙!

為命名文件使用其他文件描述符。 您知道數據來自何處; 您不知道標准輸入可能從何處重定向,因此請不要理會。

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復制到此命令的標准輸入中)。

看到這個問題:

bash是否支持嵌套在讀取循環中的讀取?

本質上,您是通過標准輸入讀取文件的,該輸入與您鍵入時的輸入流相同,因此,在提示用戶時,腳本會將文件的輸入視為用戶的輸入。 如果您改為在另一個輸入流上讀入文件,則不會覆蓋該文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM