การร้องขออินพุตของผู้ใช้ขณะอ่านบรรทัดไฟล์ตามบรรทัด


9

สำหรับคลาสฉันต้องเขียนสคริปต์ Bash ที่จะเอาท์พุทจากispellและเมื่อฉันลองและขอให้ผู้ใช้ป้อนข้อมูลในขณะที่ลูปมันก็แค่บันทึกบรรทัดถัดไปของไฟล์เป็นอินพุตของผู้ใช้

ฉันจะขอผู้ใช้ในขณะที่วนรอบได้อย่างไร?

#!/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;

คำตอบ:


8

whileคุณไม่สามารถทำในของคุณ คุณต้องใช้ไฟล์ descriptorอื่น

ลองรุ่นต่อไปนี้:

#!/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"

ดูวิธีป้องกันไม่ให้คำสั่งอื่น ๆ "กิน" อินพุต

หมายเหตุ


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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.