Re: [BUG?] "git submodule foreach" when command is ssh
On Thu, Jan 6, 2011 at 12:03 PM, Jeff King <peff@peff.net> wrote:
Show 50 quoted lines
> On Thu, Jan 06, 2011 at 11:50:58AM +1300, Chris Packham wrote:
>
>> Actually this might be a ssh/bash bug (feature?). There is different
>> behaviour between
>>
>> find . -maxdepth 1 -type d -a ! -name '\.*' | while read; do echo
>> $REPLY && ssh localhost ls /; done
>>
>> and
>>
>> find . -maxdepth 1 -type d -a ! -name '\.*' | while read; do echo
>> $REPLY && ls /; done
>
> Ssh will opportunistically eat data on stdin to send to the other side,
> even though the command on the other side ("ls" in this case) will never
> read it. Because of course ssh has no way of knowing that, and is trying
> to be an interactive terminal. So it ends up eating some random amount
> of the data you expected to go to the "read" call.
>
> You can use the "-n" option to suppress it. For example:
>
> $ (echo foo; echo bar) |
> while read line; do
> echo local $line
> ssh host "echo remote $line"
> done
>
> produces:
>
> local foo
> remote foo
>
> but:
>
> $ (echo foo; echo bar) |
> while read line; do
> echo local $line
> ssh -n host "echo remote $line"
> done
>
> produces:
>
> local foo
> remote foo
> local bar
> remote bar
>
> which is what you want.
>
> -PeffThanks that makes sense and adding -n to my ssh invocations solves the problem.