gpt4 book ai didi

makefile - Makefile中的Grep退出代码

转载 作者:行者123 更新时间:2023-12-04 04:12:40 25 4
gpt4 key购买 nike

我想检查Makefile中grep搜索的结果。与this solution相反,我不希望使用shell命令。
另外,当grep找不到字符串时,我不希望Makefile引发错误(退出代码1被视为错误)。

以下尝试忽略该错误并检查退出代码:

all:
-grep term log*
echo $$?
@case "$$?" in \
0)\
echo "found";; \
*) \
echo "not found";;\
esac;

不幸的是,退出代码始终为0。

最佳答案

makefile中一系列 Action 的单独行通常在单独的子shell中执行。要编写您想要的代码,然后:

all:
if grep term log*; \
then echo found; \
else echo not found; \
fi

那是一个命令;它直接测试 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

您这次可能需要 -,因为 grep不会作为shell条件的一部分执行,并且非零退出状态可能会触发 -e处理。我不建议对此付诸行动。

您可能会注意到,您可以在一个操作中执行 cd命令,并且由于每个操作都是单独执行的,因此您必须重复执行该操作。
install:  ${PROG}
cd ${INSTBIN}; ${RM_F} ${PROG}
${CP} ${PROG} ${INSTBIN}
cd ${INSTBIN}; ${CHOWN} ${OWNER}:${GROUP} ${PROG}; ${CHMOD} ${PERMS} ${PROG}

是的,您可以做不同的事情-我只是在说明一个观点,而不是提倡安装程序的风格。

关于makefile - Makefile中的Grep退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13068152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com