Answers:
从GNU Make文档中,
5.3.1 Choosing the Shell
------------------------
The program used as the shell is taken from the variable `SHELL'. If
this variable is not set in your makefile, the program `/bin/sh' is
used as the shell.
因此,将其放在SHELL := /bin/bash
makefile的顶部,您应该一切顺利。
顺便说一句:您也可以为一个目标执行此操作,至少对于GNU Make。每个目标可以有自己的变量分配,如下所示:
all: a b
a:
@echo "a is $$0"
b: SHELL:=/bin/bash # HERE: this is setting the shell for b only
b:
@echo "b is $$0"
打印:
a is /bin/sh
b is /bin/bash
有关更多详细信息,请参见文档中的“特定于目标的变量值”。该行可以在Makefile中的任何地方进行,而不必紧接在目标文件之前。
man
。谈论时间。:P
info
实际上,但是,我认为这确实对Andy有帮助。我知道我曾经有过这样的日子……
SHELL=/bin/bash
作为Makefile的第一行(或紧跟在注释之后)。
如果可移植性很重要,则您可能不希望依赖Makefile中的特定Shell。并非所有环境都有可用的bash。
无需显式将SHELL变量设置为指向bash,就可以执行此操作。如果您有许多makefile,这将很有用,因为SHELL不会被后续的makefile继承或从环境中获取。您还需要确保任何编译您的代码的人都以这种方式配置他们的系统。
如果运行sudo dpkg-reconfigure dash
并对提示回答“否”,则系统将不使用破折号作为默认外壳。然后它将指向bash(至少在Ubuntu中)。请注意,虽然使用破折号作为系统外壳会更有效。
sh
,bash以兼容模式(set -o posix
)运行。在此模式下,OP尝试使用的功能(进程替换)不可用。
/bin/sh: -c: line 0: syntax error near unexpected token
'`