Estoy tratando de verificar si una máquina es una ThinkPad o no usa algo como esto:
sudo dmidecode | grep ThinkPad
Quiero que el resultado final sea verdadero o falso (o 1/0).
Estoy pensando que la solución podría ser algo como esto:
sudo dmidecode | grep -c ThinkPad | test xargs -gt 0
Pero no estoy seguro de cómo usarlo correctamente xargs
aquí.
Respuesta1
Simplemente agregue la verificación del estado de salida después grep
, siempre obtendrá el estado de salida del último comando de la canalización de forma predeterminada:
sudo dmidecode | grep -q ThinkPad; echo $?
Úselo -q
para suprimir cualquier salida, grep
ya que solo nos interesa el estado de salida.
Puedes usar la agrupación de comandos si lo deseas, pero esto es algo redundante aquí:
sudo dmidecode | { grep -q ThinkPad; echo $? ;}
Respuesta2
Si va a utilizar este script de shell con una if
verificación, simplemente utilícelo -q
como sugiere heemayl:
if sudo dmidecode | grep -q Thinkpad
then
echo "I'm a Thinkpad"
fi
Dado que el if
bloque verifica el estado de salida del comando, podemos confiar en grep
el estado de salida directamente en lugar de imprimirlo $?
y compararlo con otra cosa.
Respuesta3
Inspirado porLa respuesta de Heemayl:
sudo dmidecode | grep -q ThinkPad && echo true || echo false
Esto devolverá verdadero si grep encuentra ThinkPad y falso en caso contrario.
Respuesta4
sudo dmidecode | grep -c ThinkPad | xargs test 0 -lt
Debe reorganizar el comando xargs
and test
y también sus operandos para poder obtener lo que desea. Esto devolverá un estado verdadero si hay líneas que comprenden ThinkPad distintas de cero (>0).
Alternativamente, si desea conservar el orden de los operandos del comando de prueba, puede hacerlo
sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0
Y luego, en ambos comandos, verifique el $?
valor de la variable para determinar el destino del éxito/fracaso de grep, de la siguiente manera:
if sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0; then
echo "success hooray!"
else
echo nothing
fi