read command not waiting at pause prompt
read command not waiting at pause prompt
am 21.04.2008 08:46:37 von Fox
I've shell loop in which I display 10 lines of the file at a time.
I've code line as follows to pause user:
---- My bash under GNU/Linux loop code ---
while read l
do
if [ $c -eq 10 ]
then
c=1 # reset
echo " *** Press [Enter] key to continue ..."
read anyDamkey
fi
echo $l
(( c++ ))
done < $input
I only see message *** Press [Enter] key to continue ... and read
command skips and loop continue while end of file. It appears that \n
from previous echo $line is feeding read command. In others word I'd
like to flush buffer and wait for pause prompt. How do I fix this. I
spend 4 hours but with no luck :(
~~~~~~~
My output
-----------
line 1 to 10
*** Press [Enter] key to continue .. <--- not wating for use input
line 11 to 20
*** Press [Enter] key to continue .. <--- not wating for use input
line 11 to N
TIA
Fox
Re: read command not waiting at pause prompt
am 21.04.2008 08:55:32 von Barry Margolin
In article
<1b4253b6-dc95-42bd-ab8f-ec1422ab34b3@n1g2000prb.googlegroups.com>,
Fox wrote:
> I've shell loop in which I display 10 lines of the file at a time.
> I've code line as follows to pause user:
> ---- My bash under GNU/Linux loop code ---
> while read l
> do
> if [ $c -eq 10 ]
> then
> c=1 # reset
> echo " *** Press [Enter] key to continue ..."
> read anyDamkey
> fi
> echo $l
> (( c++ ))
> done < $input
>
>
> I only see message *** Press [Enter] key to continue ... and read
> command skips and loop continue while end of file. It appears that \n
> from previous echo $line is feeding read command. In others word I'd
> like to flush buffer and wait for pause prompt. How do I fix this. I
> spend 4 hours but with no luck :(
>
> ~~~~~~~
> My output
> -----------
> line 1 to 10
> *** Press [Enter] key to continue .. <--- not wating for use input
> line 11 to 20
> *** Press [Enter] key to continue .. <--- not wating for use input
> line 11 to N
>
>
>
> TIA
>
> Fox
Standard input is being redirected, so all the read commands within the
while loop read from the file. The redirection doesn't just apply to
the read command on the while statement itself.
If you want to read from the original stdin before the redirection, you
need to save it:
exec 3<&0
while read l
do
...
read -u 3 anyDamkey
...
done < $input
Or if you specifically want to read from the terminal, use
read anyDamkey
--
Barry Margolin, barmar@alum.mit.edu
Arlington, MA
*** PLEASE post questions in newsgroups, not directly to me ***
*** PLEASE don't copy me on replies, I'll read them in the group ***
Re: read command not waiting at pause prompt
am 21.04.2008 09:06:29 von Bill Marcum
On 2008-04-21, Fox wrote:
>
>
> I've shell loop in which I display 10 lines of the file at a time.
> I've code line as follows to pause user:
> ---- My bash under GNU/Linux loop code ---
> while read l
> do
> if [ $c -eq 10 ]
> then
> c=1 # reset
> echo " *** Press [Enter] key to continue ..."
> read anyDamkey
> fi
> echo $l
> (( c++ ))
> done < $input
>
>
> I only see message *** Press [Enter] key to continue ... and read
> command skips and loop continue while end of file. It appears that \n
> from previous echo $line is feeding read command. In others word I'd
> like to flush buffer and wait for pause prompt. How do I fix this. I
> spend 4 hours but with no luck :(
>
By default the read command reads from standard input, which you have
redirected.
Possible solutions are:
read anyDamkey
read anyDamkey <&2
exec 3<&0
while read l
....
read anyDamkey <&3
....
done <$input
exec 3<$input
while read l
....
done <&3
Re: read command not waiting at pause prompt
am 21.04.2008 09:35:24 von Stephane CHAZELAS
2008-04-21, 02:55(-04), Barry Margolin:
[...]
> exec 3<&0
> while read l
> do
> ...
> read -u 3 anyDamkey
> ...
> done < $input
[...]
Or, more logically to my mind:
while read <&3 l; do
...
read anyDamLine
...
done 3< "$input"
Note that -u 3 is a ksh extension also found in bash and zsh, I
don't really see the advantage over the standard <&3 (other than
it allows for fds over 9).
--
Stéphane
Re: read command not waiting at pause prompt
am 21.04.2008 11:04:30 von Fox
thank for all your input :) it was really hard to find out the
solution just reading man pages.
Re: read command not waiting at pause prompt
am 22.04.2008 04:59:40 von Chris Mattern
On 2008-04-21, Fox wrote:
> I've shell loop in which I display 10 lines of the file at a time.
> I've code line as follows to pause user:
> ---- My bash under GNU/Linux loop code ---
> while read l
> do
> if [ $c -eq 10 ]
> then
> c=1 # reset
> echo " *** Press [Enter] key to continue ..."
> read anyDamkey
> fi
> echo $l
> (( c++ ))
> done < $input
>
>
> I only see message *** Press [Enter] key to continue ... and read
> command skips and loop continue while end of file. It appears that \n
> from previous echo $line is feeding read command. In others word I'd
> like to flush buffer and wait for pause prompt. How do I fix this. I
> spend 4 hours but with no luck :(
>
> ~~~~~~~
> My output
> -----------
> line 1 to 10
> *** Press [Enter] key to continue .. <--- not wating for use input
> line 11 to 20
> *** Press [Enter] key to continue .. <--- not wating for use input
> line 11 to N
>
>
>
> TIA
>
> Fox
Question...where is "read anyDamnkey" getting its data from?
Hint: What difference is there between "read l" and "read anyDamnkey"?
--
Christopher Mattern
NOTICE
Thank you for noticing this new notice
Your noticing it has been noted
And will be reported to the authorities