我想基于另一个命令的返回值有条件地在gnu makefile中执行命令。
具体来说,就像这样:
lsmod | grep -q pfc && sudo rmmod pfc
如果lsmod
输出的当前模块列表包含pfc
,请将其删除。这样做有一个小问题,如果grep
命令失败(模块不存在),整个管道返回非零,这会导致命令被解释为失败,但实际上这是成功的。
我可以在最后添加一个; true
以始终强制它成功,但这不会捕获rmmod
命令中的失败!
我想在sh
个实现中使用大部分内容,但从技术上讲,我猜我正在使用dash
,因为那是sh
指向Ubuntu的地方。
答案 0 :(得分:4)
您可以通过使用echo -n
之类的nop命令清除退出值来处理预期的失败:
if lsmod | grep -q pfc; then sudo rmmod pfc; else echo -n; fi
如果缺少输出,则执行nop命令,整行返回$?=0
。
修改强>:
建议的更简单的nop看起来像:
if lsmod | grep -q pfc; then sudo rmmod pfc; else true; fi
RESP
if lsmod | grep -q pfc; then sudo rmmod pfc; else :; fi