On Wednesday 01 February 2012 19:03:33 Peter Blajev wrote:
> On Wed, Feb 1, 2012 at 2:53 PM, Stephen Harris <firstname.lastname@example.org> wrote:
> > On Wed, Feb 01, 2012 at 01:07:31PM -0800, Peter Blajev wrote:
> > > echo " server2
> > > server2" |
> > > while read confLine; do
> > > echo "--> $confLine"
> > > ssh peter@$confLine ls
> > > echo "--> END $confLine"
> > > done
> > > The "for" loop in the script above will run twice but the "while" loop
> > > below it will run only once.
> > > Any idea what would cause the ssh command to break the while loop?
> > "ssh" is reading from stdin and passing the data over to the remote
> > machine. You can test this with
> > ssh peter@$confLine 'read x ; echo we got $x'
> > To stop it doing this, use the "-n" flag
> > ssh -n peter@$confLine ls
> This is it. Right on Stephen. Thank you very much. I can't believe I've
> gone so long without knowing it.
> This works for me. I still don't have full understanding of it but I'll do
> some more reading.
> Unfortunately I can't always use the (-n) option. If I wan't to send data
> through the pipe then the (-n) won't work. For example (on top of my head):
> mysqldump dB | ssh peter@remoteServer "mysql dB"
> In my script I ended up using "ssh -n" when I want to work on the output of
> remotely ran command and "ssh" without (-n) when I want to send data over
> ssh to a remote command.
> This so far is not breaking the while loop and it seems to be working but
> it makes me nervous.
Curious I found this very same problem some days ago and wrote about it in my blog hehe
All the options you have described in the thread will usually work but I suggest you to think about another option. Make the while read from another file descriptor as in:
while read <&3 line; do
done 3< file
And why this? because not only ssh reads from standard input but others like ffmpeg do as well(and probably more...)
CentOS mailing list