检查 bash 是否 make 做了某事

检查 bash 是否 make 做了某事

make我从 bash 脚本调用。脚本的其余部分仅在make实际执行某些操作时才需要执行(即它没有说nothing to be done for...)。

我如何在 bash 中检查这一点?返回码与某事时相同发生(并且不会失败),所以我不能使用它。有没有比make比较输出并查看它是否包含更好的方法nothing to be done for

我正在使用 GNU Make 4.0。

答案1

如果您的工作流程可以容纳它,您可以make在运行它来更新文件之前发送试运行:

-q, --问题

“提问模式”。不要运行任何命令,或打印任何内容;如果指定的目标已经是最新的,则仅返回退出状态为零,否则返回非零。

(我有点惊讶这不是--recon的行为的一部分。)

答案2

我相信这会做你想要的。使用 GNU grep 进行测试。

mk_output=$(make)   # add whatever make options you use
if printf '%s\n' "$mk_output" | grep -qF 'Nothing to be done for'
then
    echo '"Nothing to be done for" was present in output'
else
    echo '"Nothing to be done for" was NOT present in output'
fi

我们捕获 的输出make,然后使用 grep (选项 Quiet 和固定字符串)查找您要查找的字符串。如果找到,则退出状态为 grep0;如果没有找到,1。

事后感想:

make通常会生成大量输出,因此最好将第一行更改为:

mk_output=$(make (make options) | grep -qF 'Nothing to be done for')

这样的话,mk_output规模就不会那么大了。

如果您想查看运行时的输出make并捕获它,请使用tee捕获到文件:

make | tee make_output
if grep -qF 'Nothing to be done for' make_output
then etc.

相关内容