2014-11-20 4 views
2

Находясь в цикле, я читаю ввод данных пользователем, как показано ниже:чтение пользовательского ввода в сценарии оболочки

#!/bin/bash 
while read line; do 
    echo $line 
    python find_entity.py $line 
    read -p "Enter your name : " choice 
    echo $choice 
done < "q0.txt" 

, но до сих пор она не требует выбора пользовательского ввода, а пишет True и просто продолжать. Что здесь не так?

+1

Измените shebang на '#!/Bin/bash -x' и посмотрите на результат ... –

+0

@FredrikPihl: спасибо, но все же теперь измените – user123

+0

Цель флага' -x' - включить отладку, чтобы что вы увидите, к чему ваши параметры расширяются. Посмотрите на результат и убедитесь, что '$ line' и т. Д. Содержат ожидаемые значения. –

ответ

2

Ниже не будет охватывать все возможные случаи использования, но, пожалуйста, попробуйте, если это простое решение достаточно для твоего

... 
read -p "Enter your name : " choice < /dev/tty 
... 

, что случилось, что указал вам ... что read считывает данные из стандартного ввода , и у вас есть глобально перенаправлены stdin в файл q0.txt

1

Почему вы не просто сделать:

for line in `cat q0.txt` 
do 
    echo $line 
    python find_entity.py $line 
    read -p "Enter your name : " choice 
    echo $choice 
done 

Ваш код не запрашивает ввода, потому что вы перенаправляете содержимое q0.txt на стандартный ввод, а оператор «читать» получает переменную выбора с того же места.

+0

извините, причина была указана gboffi – manolonte

Смежные вопросы