【发布时间】:2016-03-07 04:49:20
【问题描述】:
我正在使用 makefile 中的 shell 函数进行 grep 搜索:
RESULT = $(shell grep 查找)
我可以只存储退出代码,而不是存储 grep 的结果吗?或者,是否有一种方法可以检查 RESULT 是否为非空?
【问题讨论】:
标签: command-line terminal makefile
我正在使用 makefile 中的 shell 函数进行 grep 搜索:
RESULT = $(shell grep 查找)
我可以只存储退出代码,而不是存储 grep 的结果吗?或者,是否有一种方法可以检查 RESULT 是否为非空?
【问题讨论】:
标签: command-line terminal makefile
你需要'grep'结果重定向到/dev/null,然后打印退出码:RESULT = $(shell grep find in >/dev/null 2>/dev/null; echo $$?)
【讨论】:
&>/dev/null 是一个不推荐使用的非标准 bash 扩展,不要使用它
可以使用RESULT = $(shell COMMAND; $$?),解释:
COMMAND 是您要检查退出代码的命令(您的示例中的grep find in); 分隔任意两个命令$$? 被make 解析为$? 并因此传递给shell,并且:
$?always expands to the status of the most recently executed foreground command or pipeline
您也可以使用FD redirection 摆脱COMMAND 的输出。
【讨论】:
/bin/sh: 0: command not found,所以我只做$(shell COMMAND; echo $$?)