从shell管道返回true

时间:2017-09-02 21:12:55

标签: shell makefile sh dash-shell

我想基于另一个命令的返回值有条件地在gnu makefile中执行命令。

具体来说,就像这样:

lsmod | grep -q pfc && sudo rmmod pfc

如果lsmod输出的当前模块列表包含pfc,请将其删除。这样做有一个小问题,如果grep命令失败(模块不存在),整个管道返回非零,这会导致命令被解释为失败,但实际上这是成功的。

我可以在最后添加一个; true以始终强制它成功,但这不会捕获rmmod命令中的失败!

我想在sh个实现中使用大部分内容,但从技术上讲,我猜我正在使用dash,因为那是sh指向Ubuntu的地方。

1 个答案:

答案 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