我有一个 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 $?