2014-12-18 107 views
0

我有這樣的bash代碼:Bash腳本不要求用戶輸入?

#!/bin/bash 
ls "$SOURCE" > cplist.txt 
cat cplist.txt | while read FILE; do 
    echo "Would you like to copy $FILE? y/n" 
    read ANSWER 
    if [ "$ANSWER" = "y" ]; then 
     cp -v "$FILE" ./Destination; 
    else 
     echo "File NOT coppied" 
    fi 
done 

的想法是讓所有的文件列表中的文件夾中,然後詢問用戶他們想要複製到目標文件夾中的每個文件。目前這個腳本不允許用戶輸入:「你想複製$ file?y/n」。我不知道爲什麼,因爲我對這種事情很陌生。有任何想法嗎? 在此先感謝!

回答

1

您遇到了問題,因爲您正在使用兩個獨立的電話read,但您正在使事情比他們需要的更復雜。嘗試是這樣的:

#!/bin/bash 

for file in "$source"/*; do 
    echo "Would you like to copy $file? y/n" 
    read -r answer 
    if [ "$answer" = "y" ]; then 
     cp -v "$file" ./Destination; 
    else 
     echo "File NOT copied" 
    fi 
done 

,而不是分析ls(這是generally considered a cardinal sin),這種使用shell的內置水珠擴展到目錄$source匹配的一切。我已將-r開關添加到read,即a good idea in general。我也讓你的變量名小寫。大寫變量應保留爲內置變量,如$PATH,您肯定不希望這些變量意外覆蓋。

0

您將cplist.txt設置爲讀取嘗試讀取的其餘部分的標準輸入。