我想暂时使用与默认/bin/sh
不同的shell和递归GNU Make设置。由于递归,我不能使用SHELL hack,或者我必须(是吗?)编辑所有的makefile(在每个命令行上我都要做)
$(MAKE) SHELL=$(SHELL)
),我不想这样做。
由于这只是暂时的,我以为我会成为root用户,备份/bin/sh
并将其编辑为我想要的内容:
#!/bin/dash
echo dash shell
/bin/dash $@
根据GNU Make手册,它使用
运行配方行 execve("/bin/sh", "-c <recipe line>")
然后基于execve
的文档,这应该工作。但事实并非如此。当我运行GNU Make时,它完全忽略了上面改变的/bin/sh
并且就好像它没有被改变一样。
为什么以及如何让它发挥作用?
答案 0 :(得分:0)
我不知道,这只是一个假设,得到了除上述以外的一些证据的支持。当内部SHELL
make变量是默认值,即/bin/sh
,登录shell,然后GNU Make不运行配方
execve("/bin/sh", "-c recipe")
但是,只需使用
execve("recipe")
这显然与GNU Make手册中的以下行相矛盾
&#34;程序/ bin / sh用作shell。传递给shell的参数取自变量.SHELLFLAGS。 .SHELLFLAGS的默认值是-c通常&#34;