Solicitando entrada do usuário ao ler o arquivo linha por linha

8

Para a classe, eu preciso escrever um script Bash que pegue a saída de ispell e quando eu tento solicitar entrada do usuário dentro do loop while ele apenas salva a próxima linha do arquivo como entrada do usuário.

Como eu poderia solicitar a entrada do usuário no loop 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;
    
por Steven10172 11.10.2012 / 23:45

2 respostas

7

Você não pode fazer isso no seu while . Você precisa usar outro descritor de arquivo

Experimente a seguinte versão:

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

Veja Como evitar que outros comandos "comam" a entrada

NOTAS

  • USE MAIS CITAÇÕES! Eles são vitais. Consulte o link e o link
  • bash não é C ou Perl , não é necessário colocar ; em cada linha final
por 11.10.2012 / 23:58
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
    
por 12.10.2012 / 00:07