Yêu cầu người dùng nhập trong khi đọc từng dòng tệp


9

Đối với lớp tôi cần viết một tập lệnh Bash sẽ lấy đầu ra từ ispellvà khi tôi thử và yêu cầu người dùng nhập vào bên trong vòng lặp while, nó chỉ lưu dòng tiếp theo của tệp làm đầu vào của người dùng.

Làm thế nào tôi có thể yêu cầu người dùng nhập vào vòng lặp while?

#!/bin/bash
#Returns the misspelled words
#ispell -l < file

#define vars
ISPELL_OUTPUT_FILE="output.tmp";
INPUT_FILE=$1


ispell -l < $INPUT_FILE > $ISPELL_OUTPUT_FILE;

#echo a new line for give space between command
#and the output generated
echo "";

while read line;
do
   echo "'$line' is misspelled. Press "Enter" to keep";
   read -p "this spelling, or type a correction here: " USER_INPUT;

   if [ $USER_INPUT != "" ]
   then
      echo "INPUT: $USER_INPUT";
   fi


   echo ""; #echo a new line
done < $ISPELL_OUTPUT_FILE;

rm $ISPELL_OUTPUT_FILE;

Câu trả lời:


8

Bạn không thể làm điều đó trong của bạn while. Bạn cần sử dụng một mô tả tập tin khác

Hãy thử phiên bản sau:

#!/bin/bash
#Returns the misspelled words
#ispell -l < file

#define vars
ISPELL_OUTPUT_FILE="output.tmp";
INPUT_FILE=$1


ispell -l < $INPUT_FILE > $ISPELL_OUTPUT_FILE;

#echo a new line for give space between command
#and the output generated
echo "";

while read -r -u9 line;
do
   echo "'$line' is misspelled. Press "Enter" to keep";
   read -p "this spelling, or type a correction here: " USER_INPUT;

   if [ "$USER_INPUT" != "" ]
   then
      echo "INPUT: $USER_INPUT";
   fi


   echo ""; #echo a new line
done 9< $ISPELL_OUTPUT_FILE;

rm "$ISPELL_OUTPUT_FILE"

Xem Cách giữ các lệnh khác không "ăn" đầu vào

GHI CHÚ


0
#!/bin/bash

exec 3<> /dev/stdin

ispell -l < $1 | while read line
do
    echo "'$line' is misspelled. Press 'Enter' to keep"
    read -u 3 -p "this spelling, or type a correction here: " USER_INPUT

    [ "$USER_INPUT" != "" ] && echo "INPUT: $USER_INPUT"
done
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.