So I'm trying to do something like the following:
while read line; do
read userInput
echo "$line $userInput"
done < file.txt
So say file.txt has:
Hello?
Goodbye!
Running the program would create:
Hello?
James
Hello? James
Goodbye!
Farewell
Goodbye! Farewell
The issue (naturally) becomes that the userinput read reads from stdin which in our case is file.txt. Is there a way to change where it's reading from temporarily to the terminal in order to grab user input?
Note: The file I am working with is 200,000 lines long. and each line is about 500 chars long. So keep that in mind if needed
Instead of using redirection, you can open file.txt
to a file descriptor (for example 3) and use read -u 3
to read from the file instead of from stdin
:
exec 3<file.txt
while read -u 3 line; do
echo $line
read userInput
echo "$line $userInput"
done
Alternatively, as suggested by Jaypal Singh, this can be written as:
while read line <&3; do
echo $line
read userInput
echo "$line $userInput"
done 3<file.txt
The advantage of this version is that it also works in sh
(the -u
option for read
doesn't work in sh
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With