
Así que estoy tratando de saber si la máquina tiene batería y luego ejecuto diferentes comandos en función de si la tiene o no. Esto es lo que tengo hasta ahora:
upower -d >> /tmp/batstat
if [ grep -F BAT0 /tmp/batstat ]; then
echo "BAT0 PRESENT" >> /tmp/batstat
else
echo "NO BAT0" >> /tmp/batstat
fi
Sin embargo, esto devuelve el error "bash: [: demasiados argumentos" al escribir NO BAT0 en /tmp/batstat como se esperaba. Ejecutar solo grep funciona correctamente, por lo que no entiendo por qué no funciona como condición if.
Si hay una mejor manera de comprobar si hay una batería, estoy 100% abierto a ello.
Respuesta1
if upower -d | grep -qF BAT0 ; then
echo "BAT0 PRESENT"
else
echo "NO BAT0"
fi
if
Tomará una serie de comandos y trabajará en el estado del final, en este caso el grep. grep
devuelve verdadero si coincide y falso en caso contrario.
Respuesta2
grep -F BAT0 /tmp/batstat
no es de ninguna manera una EXPRESIÓN CONDICIONAL (como se detalla en el manual fino) para la test
función incorporada de bash
. Dado que la salida de grep
no se utiliza, la -q
opción y confiar en el código de salida probablemente sea suficiente.
grep -F -q BAT0 batstat
if [[ $? -eq 0 ]]; then
echo yea
else
echo nay
fi
Además, /tmp/batstat
es probable que sea una muy mala elección, especialmente cuando un usuario local nefasto tiene acceso. Considere en su lugar usarmktemp(1)
, o no localizar el archivo en /tmp
.