繁体   English   中英

从shell管道返回true

[英]Returning true from a shell pipeline

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

具体来说,是这样的:

lsmod | grep -q pfc && sudo rmmod pfc

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

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

我想要的东西大部分都可以在sh实现中移植,但是从技术上讲,我想我正在使用dash因为这就是sh在Ubuntu上的要点。

您可以通过使用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

回应

if lsmod | grep -q pfc; then sudo rmmod pfc; else :; fi

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM