BTW /usr/bin/env creates a redundant process here. The reason people use /usr/bin/env to translate an execv() (does not use PATH) to an execvp() (does). But GNU make uses execvp() already; try "make SHELL=sh” to see that.
-David Boyce On Tue, May 26, 2015 at 5:14 AM, Paul Smith <psm...@gnu.org> wrote: > On Mon, 2015-05-25 at 21:05 -0700, Afif Elghraoui wrote: >> Hello, >> I am trying to use sqlite3 as my Makefile shell. In order to have the >> query outputs go to a file, I need to pass a file in to sqlite using its >> -i flag. I rely on the process substitution feature in bash for the >> .SHELLFLAGS to provide the file: >> >> SHELL=/usr/bin/env sqlite3 >> .SHELLFLAGS=-init <(echo ".output $@") $(DB) >> >> I get this error: >> /bin/sh: 1: Syntax error: "(" unexpected >> Makefile:13: recipe for target 'fq' failed >> >> It looks like .SHELLFLAGS is evaluated with /bin/sh regardless of what >> SHELL is set to. Is there any way I could evaluate them with bash? > > You're missing the main point: the values of SHELL and SHELLFLAGS aren't > being evaluated by /bin/sh, or bash... they're not being evaluated by > any shell at all! > > The entire point of setting SHELL is you're choosing a shell that make > will invoke. Make does not use a shell to start the shell that you > requested: it invokes the shell you requested directly (using the exec() > system calls). > > The simplest way to do what you want is create a script (outside of > make) that will operate like this, then set SHELL in your makefile to > that script. You can use #!/bin/bash at the top of that script to > request it be run in bash, if you like. > > > _______________________________________________ > Help-make mailing list > Help-make@gnu.org > https://lists.gnu.org/mailman/listinfo/help-make _______________________________________________ Help-make mailing list Help-make@gnu.org https://lists.gnu.org/mailman/listinfo/help-make