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

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

我有一个 Makefile,它可以运行一个需要一点时间的工具;它允许我替换所使用的命令:

make TOOL=alternative-tool

我想跳过 Makefile 中的该步骤,因此我正在寻找以状态 0 退出且副作用可忽略不计的命令。

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

make TOOL=true

读起来好像我运行该工具,但我没有。

是否存在默认安装的可执行文件,它不是/bin/true以状态 0 退出,而且具有朗朗上口且易于输入的名称?

答案1

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

true你担心的是

make TOOL=true

看起来不像命令名。但如果你写

make TOOL=/bin/true

那么这无疑是一个命令。有人可能会误读TOOL=true为某个地方的其他工具,但这种误读不太TOOL=/bin/true可能发生。


我不确定什么时候:会起作用,它是一个 shell 内置命令,而不是外部命令。亨宁·马霍姆据报道,它似乎有效。但我认为这并不适用于所有情况,你发现它对你不起作用

至于 shell 别名,您无法使用它,因为传递给命令的参数中不会执行别名扩展,makefile 也不会使用以前定义的 shell 别名。即使make在新 shell 中运行命令,该 shell 也不会有别名(即使有也不会使用它,因为它是非交互式 shell,其中不会自动启用别名扩展)。

答案2

虽然我同意使用完整路径true是最好的解决方案,但我想指出的是,迄今为止最常见的避免实际命令执行的方法:echo在它前面加上一个。所以:

make TOOL=echo

答案3

您可以随时创建自己的命令,该命令不执行任何操作,只返回零退出状态。一些选项:

  • 一个适当命名的符号链接/bin/true

  • 空的 shell 脚本

  • 一个几乎空的 C 程序:

    int main() {
        return 0;
    }
    

答案4

以下是使用稍多一些的字符来实现此目的的一种方法:

function T() { /bin/true; }

完成一次后,您只需使用名称即可重新执行它T

false; T; echo $?

相关内容