[CentOS] Bash scripting - Remotely ran commands break while loop

Marc Deop damnshock at gmail.com
Fri Feb 3 11:45:53 UTC 2012


On Wednesday 01 February 2012 19:03:33 Peter Blajev wrote:
> On Wed, Feb 1, 2012 at 2:53 PM, Stephen Harris <lists at spuddy.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 at 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...)

Regards,

Marc Deop



More information about the CentOS mailing list