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