On Jan 27, 2012 12:25 PM, "David Holland" <dholland-bugs%netbsd.org@localhost> wrote:
> The following reply was made to PR bin/45875; it has been noted by GNATS.
> From: David Holland <dholland-bugs%netbsd.org@localhost>
> To: gnats-bugs%NetBSD.org@localhost
> Subject: Re: bin/45875: usr.bin/make: make -B not using a shell for every
> Date: Fri, 27 Jan 2012 16:22:38 +0000
> On Thu, Jan 26, 2012 at 11:35:02PM +0000, Marko Sch?tz Schmuck wrote:
> > > That's in a separate invocation, as advertised. What are you
> > > complaining about? That it skips going through the shell for simple
> > > commands?
> > Yes, that's what I am complaining about. It says that it executes a
> > "single shell per command". Also there is the target .SINGLESHELL (not
> > documented in the man page) that sets compatMake to true. The change I
> > propose would also make that work.
> That's a feature, not a bug. If you find a case where it fails, that
> is, where make thinks it knows how to execute some piece of shell
> syntax itself but gets it wrong, please file a bug report. The
> behavior as it is should be completely equivalent, except faster.
a.) The shell invocation is supposed to use .SHELL specification, which of course allows the while command to be rewritten
b.) The shell invocation will be subject to various expansions (eg. alias expansion) to which execve will not be subjected
So I think the assumption that execve.is just a faster version of executing a command through the shell (even for well-behaved cases) is wrong. And definitely when the user asks explicitly for individual shells...
> The important thing about how many shells it invokes is the scope of
> shell actions like "cd".
> David A. Holland