Как читать построчно, а также получать ввод с клавиатуры? - PullRequest
1 голос
/ 10 февраля 2011

У меня есть скрипт оболочки вроде -

while read -r line;
do 
echo $line
done  < file.txt

Это нормально работает, но мне нужно запрашивать ввод у пользователя после каждой строки, прочитанной из файла.Я пытался добавить "читать", но это не работает.

while read -r line;
do 
echo $line
#prompt user here
read input_user
done  < file.txt

Есть мысли?Я тоже открыт для использования awk.

Ответы [ 3 ]

3 голосов
/ 10 февраля 2011

Вы можете использовать опцию -u read, которая указывает дескриптор файла:

while read -u 9 -r line; do 
    echo $line
    read -p 'Press ENTER ' input_user
done  9<file.txt

-u 9 в сочетании с 9<file.txt означает, что чтения в цикле while и «регулярные» операторы read все еще поступают со стандартного ввода.

Как правило, вы можете выбрать любой дескриптор файла, который еще не использовался - 0, 1 и 2 являются стандартным вводом, выводом и ошибкой соответственно. Я обычно начинаю с 9 и работаю по мере необходимости, в зависимости от количества дескрипторов файлов, к которым мне нужно получить доступ одновременно.

Пример стенограммы:

pax$ ./qq.sh
line 1
Press ENTER <ENTER pressed>
line 2
Press ENTER <ENTER pressed>
line 3
Press ENTER <ENTER pressed>
line 4
Press ENTER <ENTER pressed>
pax$ _
3 голосов
/ 10 февраля 2011

Используйте другой FD для цикла read.

while read -u 4 -r line
do 
  echo $line
  #prompt user here
  read input_user
done 4< file.txt
1 голос
/ 10 февраля 2011

Если вы действительно имеете в виду клавиатура ,

while read -r line; do 
    echo $line
    #prompt user here
    read input_user </dev/tty
done <file.txt

будет считывать данные с подключенного терминала независимо от перенаправлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...