ale*_*der 9 grep makefile exit-code
我想在Makefile中检查grep搜索的结果.与此解决方案相反,我不希望使用shell命令.另外,当grep找不到字符串时,我不希望Makefile引发错误(退出代码为1被视为错误).
以下尝试忽略该错误并检查退出代码:
all:
-grep term log*
echo $$?
@case "$$?" in \
0)\
echo "found";; \
*) \
echo "not found";;\
esac;
Run Code Online (Sandbox Code Playgroud)
不幸的是,退出代码始终为0.
a中一系列动作的单独行makefile通常在单独的子shell中执行.要编写您想要的内容,然后:
all:
if grep term log*; \
then echo found; \
else echo not found; \
fi
Run Code Online (Sandbox Code Playgroud)
这是一个单一的命令; 它grep直接测试退出状态.注意自由使用分号; 这是必要的,因为它在传递给shell时会变得扁平.另请注意,-不需要; 整个语句以状态0退出,因为其中一个echo命令被执行,成功,这是从子shell返回的状态.但是这个伎俩的另一部分; IIRC,脚本被调用,/bin/sh -e因此脚本从shell命令退出第一个错误(非零)状态 - 除了显式条件,如if.
如果你想明确捕获状态grep(如果只是为了确保它正确完成),那么:
all:
-grep term log*; \
status=$$?; echo $$status; \
if [ $$status = 0 ]; \
then echo found; \
else echo not found; \
fi
Run Code Online (Sandbox Code Playgroud)
您可能需要-此时间,因为grep它不是作为shell条件的一部分执行的,非零退出状态可能会触发-e处理.我不建议使用这个.
您可能会注意到,您可以cd在操作中执行命令,并且因为每个操作都是单独执行的,所以必须重复执行.
install: ${PROG}
cd ${INSTBIN}; ${RM_F} ${PROG}
${CP} ${PROG} ${INSTBIN}
cd ${INSTBIN}; ${CHOWN} ${OWNER}:${GROUP} ${PROG}; ${CHMOD} ${PERMS} ${PROG}
Run Code Online (Sandbox Code Playgroud)
是的,你可以采用不同的方式 - 我正在展示一个观点,而不是提倡一种安装程序的方式.
| 归档时间: |
|
| 查看次数: |
5569 次 |
| 最近记录: |