要检测给定的内核模块是否有效(不是检测它是否已加载,而是检测它是否在系统中可用),可以在 dry-mode 下运行 modprobe,它会做出响应。目前,我只需执行此操作并执行 grep 匹配单词“not found”即可在代码中输出此信息。但我认为输出不能保证,例如,如果它恰好被翻译了。有没有更好的方法来做到这一点?
答案1
在我的 Debian 10 中,退出状态modprobe --dry-run …
反映是否有任何错误。毫不奇怪,退出状态基本上就是为此而设的。
示例(shell 代码):
-
modprobe --quiet --dry-run loop && echo "loop - valid" modprobe --quiet --dry-run garbage123 && echo "garbage123 - valid"
-
modprobe --quiet --dry-run loop || echo "loop - invalid" modprobe --quiet --dry-run garbage123 || echo "garbage123 - invalid"
-
if modprobe --quiet --dry-run loop; then # code to run when valid echo "loop - valid" else # code to run when invalid echo "loop - invalid" fi
我注意到我不需要以 root 身份来使用modprobe --dry-run
这样的功能。
有些工具使用它们的退出状态不仅仅是为了指示错误。例如,如果grep
未找到任何内容,它将返回1
(这通常表示失败)。当我读到你曾经grep
告诉是否有匹配项时,我以为你测试了退出状态grep
。这个答案的重点是你可以(并且应该)测试退出状态modprobe
。