Bash 如果基于 grep 结果给出“参数太多”错误?

Bash 如果基于 grep 结果给出“参数太多”错误?

所以我试图判断机器是否有电池,然后根据是否有电池运行不同的命令。这是我到目前为止所拥有的:

upower -d >> /tmp/batstat
if [ grep -F BAT0 /tmp/batstat ]; then
    echo "BAT0 PRESENT" >> /tmp/batstat
else
    echo "NO BAT0" >> /tmp/batstat
fi

但是,当按预期将 NO BAT0 写入 /tmp/batstat 时,这会返回错误“bash: [: 参数太多”。仅运行 grep 可以正常工作,所以我不明白为什么它不能作为 if 条件工作。

如果有更好的方法来检查电池,我百分百愿意接受。

答案1

if upower -d | grep -qF BAT0 ; then
   echo "BAT0 PRESENT"
else
   echo "NO BAT0"
fi

if将执行一系列命令并处理最后一个命令的状态,在本例中为 grep。grep如果匹配则返回 true,否则返回 false。

答案2

grep -F BAT0 /tmp/batstat绝不是test的内置条件表达式(如精美手册中详述) bash。由于 的输出grep未使用,因此-q选项和依赖退出代码可能就足够了。

grep -F -q BAT0 batstat
if [[ $? -eq 0 ]]; then
    echo yea
else
    echo nay
fi

此外,/tmp/batstat这可能是一个非常糟糕的选择,尤其是在邪恶的本地用户可以访问的情况下。考虑改为使用mktemp(1),或未在 下找到该文件/tmp

相关内容