使用与GNU不同的shell递归:为什么用root替换不同的/ bin / sh似乎不起作用?

时间:2015-10-12 05:05:30

标签: makefile

我想暂时使用与默认/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并且就好像它没有被改变一样。

为什么以及如何让它发挥作用?

1 个答案:

答案 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;