以零状态退出的命令(不是/ bin / true)?


11

我有一个运行文件的Makefile,该工具需要一些时间。它允许我替换使用的命令:

make TOOL=alternative-tool

我想跳过Makefile中的这一步,所以我正在寻找状态为0退出且副作用可以忽略的命令。

显然,我可以使用true,但这有点令人困惑:

make TOOL=true

看起来好像我运行该工具,但是我不想。

是否有一个默认安装的可执行文件,它不是/bin/true以状态0退出,并且具有易于识别的名称?


Makefile支持注释,gnu.org/software/make/manual/html_node/ Makefile- Contents.html。在该行之前添加注释并记录您的代码。这减少了混乱,并解释了为什么使用某种方法。
Freiheit

1
什么线 在TOOL=true调用make,很可能在README文件时附近将是在命令行上。调用该工具的实际行位于7000行(第三方)makefile中。
罗杰·利普斯科姆

Answers:


42

即使您要求的内容不是“ not /bin/true”,用true全名替换/bin/true它以表明它是true程序,而不是“ true”的其他含义也可能是最好的解决方案。

你关注的是,true

make TOOL=true

似乎不是命令名称。但是如果你写

make TOOL=/bin/true

那么这无疑是一个命令。有人可能会误读TOOL=true,意味着打算在某处使用其他工具,但不会发生这种误读TOOL=/bin/true


我不确定什么时候可以运行:,它是内置的Shell而不是外部命令。亨宁Makholm报道称,它似乎工作。但是我认为它并非在所有情况下都有效,并且您发现它并不适合您

对于shell别名,您不能使用它,因为不会在传递给命令的参数中执行别名扩展,makefile也不会使用先前定义的shell别名。即使make在新的外壳程序中运行命令,该外壳程序也不会具有别名(即使它具有别名也不会使用它,因为它将是非交互式外壳程序,其中不会自动启用别名扩展)。


1
使用:似乎对我来说很好。make每次执行完自己的替换操作后,总是会生成一个shell来运行每个命令。
hmakholm在莫妮卡(Monica)身上留下了

@HenningMakholm谢谢,我已经编辑了。您可能要发布答案。乐林成对要提出的问题进行了评论:,但这应该是一个答案(尤其是如果是正确的话),而该评论并不能解释为什么人们期望它起作用。在hello.c没有makefile 的目录中,该目录可make hello编译hello.chello,我发现其make CC=: hello行为符合您的要求。
伊莱亚·卡根

2
不幸的是,对于这个特定的Makefile(它使用erlang.mk),使用:不起作用。露骨/bin/true是最好的方法。
罗杰·利普斯科姆

7

尽管我同意使用完整的路径true将是最好的解决方案,但我想指出到目前为止,避免实际命令执行的最常见方法是:将其echo放在最前面。所以:

make TOOL=echo

我认为,当重要的是提醒人们TOOL不要压制其他任何行动时,这有时会很有用。没有-s或等效的情况下,将make散发冗余信息,因为两者makeecho由by运行的命令make分别发出输出。例如,当我make CC=echo hellohello.c没有makefile 的目录中运行时,我将echo hello.c -o hello作为输出的第一行,hello.c -o hello作为第二行。但是有些版本会使用(或用户可能会添加)-s,这很有帮助。make -s CC=echo hello给公正hello.c -o hello
伊莱亚·卡根

(如果命令涉及shell扩展,这可能仍然有用,因此,如果有兴趣,您可以更清楚地了解正在运行的内容)
muru

5

您始终可以创建自己的命令,该命令除了返回零退出状态外什么也不做。一些选项:

  • 正确命名的符号链接 /bin/true

  • 一个空的shell脚本

  • 一个几乎为空的C程序:

    int main() {
        return 0;
    }

这种程序的好名字是noop或no-op。
arp

0

在工作目录中创建一个指向/ bin / true的符号链接,名称类似于skip。从而...

skip -> /bin/true

然后可以使生产线...

make TOOL=./skip

-2

这是一种使用更多字符的方法:

function T() { /bin/true; }

完成一次操作后,您只需使用name即可重新执行它T

false; T; echo $?

3
您能否解释一下如何从Make变量值中调用此函数(在相关情况下使用)?
大卫·佛斯特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.