git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] Use SHELL_PATH to fork commands in run_command.c:prepare_shell_cmd

From
Jeff King <peff@peff.net>
Date
Mar 27, 2012, 03:34 UTC
Message-ID
<20120327033420.GC17338@sigill.intra.peff.net>
In-Reply-To
<20120327032917.GB17338@sigill.intra.peff.net>
On Mon, Mar 26, 2012 at 11:29:17PM -0400, Jeff King wrote:
Show 18 quoted lines
> > +#ifndef SHELL_PATH
> > +# define SHELL_PATH "sh"
> > +#endif
> 
> Does this default ever kick in? The Makefile defaults SHELL_PATH to
> /bin/sh, so we will always end up with at least that.
> 
> Doing so at least makes us consistent across builds, but I wonder if we
> should leave it as "sh" on systems that do not set SHELL_PATH manually.
> Executing "sh" via the PATH is the normal system() thing to do. I doubt
> many people have an "sh" in their PATH ahead of /bin/sh, but if they do,
> we are changing the behavior for them for no good reason.
> 
> The whole SHELL_PATH and SANE_TOOL_PATH mess is about helping people on
> less-abled systems, and I do not mind bending the usual conventions to
> make things more convenient on those systems (e.g., by not doing the
> PATH lookup of the shell name). But it would be nice if that bending did
> not affect people on more mainstream systems.
I think you could do that pretty easily with this in the Makefile:
diff --git a/Makefile b/Makefile
index be1957a..fcd6896 100644
--- a/Makefile
+++ b/Makefile
@@ -528,6 +528,9 @@ BINDIR_PROGRAMS_NO_X += git-cvsserver
 # Set paths to tools early so that they can be used for version tests.
 ifndef SHELL_PATH
 	SHELL_PATH = /bin/sh
+	SHELL_NAME = sh
+else
+	SHELL_NAME = $(SHELL_PATH)
 endif
 ifndef PERL_PATH
 	PERL_PATH = /usr/bin/perl

and then just pass and use $SHELL_NAME in run-command.c (I guess you'd
have to make a $SHELL_NAME_SQ, too).

One other option not discussed: what if you always just used the
basename of $SHELL_PATH? That would fix your problem (it would do "bash
-c" instead of "sh -c"), while keeping the same PATH-lookup semantics
that exist now. The only setup it wouldn't help is somebody who uses
/some/other/sh, then still has /bin in their PATH before /some/other.

-Peff
Previous: Jeff KingNext: Jonathan Nieder
Message 11 of 29 in “Make run-command.c honour SHELL_PATH”
  1. 0/2 Make run-command.c honour SHELL_PATHBen Walton, Mar 25, 2012
  2. 1/2 run-command.c: Define SHELL_PATH macro for use in prepare_shell_cmdBen Walton, Mar 25, 2012
  3. 2/2 Makefile: Set EXTRA_CPPFLAGS during the compilation of run-commandBen Walton, Mar 25, 2012
  4. Jonathan NiederMar 26, 2012
  5. Ben WaltonMar 26, 2012
  6. Jeff KingMar 26, 2012
  7. Ben WaltonMar 26, 2012
  8. Jeff KingMar 26, 2012
  9. Use SHELL_PATH to fork commands in run_command.c:prepare_shell_cmdBen Walton, Mar 27, 2012
  10. Jeff KingMar 27, 2012
  11. Jeff KingMar 27, 2012
  12. Jonathan NiederMar 27, 2012
  13. Jeff KingMar 27, 2012
  14. Jonathan NiederMar 27, 2012
  15. Johannes SixtMar 27, 2012
  16. Ben WaltonMar 28, 2012
  17. Jeff KingMar 28, 2012
  18. Use SHELL_PATH from build system in run_command.c:prepare_shell_cmdBen Walton, Mar 28, 2012
  19. Junio C HamanoMar 29, 2012
  20. Jonathan NiederMar 29, 2012
  21. Jonathan NiederMar 29, 2012
  22. Ben WaltonMar 28, 2012
  23. Jonathan NiederMar 27, 2012
  24. Jonathan NiederMar 27, 2012
  25. Ben WaltonMar 27, 2012
  26. Jonathan NiederMar 26, 2012
  27. Jeff KingMar 26, 2012
  28. Jeff KingMar 26, 2012
  29. Jonathan NiederMar 30, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.