Estou tentando verificar se uma máquina é ThinkPad ou não usando algo assim:
sudo dmidecode | grep ThinkPad
Quero que o resultado final retorne verdadeiro ou falso (ou 1/0).
Estou pensando que a solução pode ser algo assim:
sudo dmidecode | grep -c ThinkPad | test xargs -gt 0
Mas não tenho certeza de como usar corretamente xargs
aqui.
Responder1
Basta seguir a verificação do status de saída após grep
, ele sempre obterá o status de saída do último comando do pipeline por padrão:
sudo dmidecode | grep -q ThinkPad; echo $?
Use -q
para suprimir qualquer saída, grep
pois estamos interessados apenas no status de saída.
Você pode usar o agrupamento de comandos se desejar, mas isso é um tanto redundante aqui:
sudo dmidecode | { grep -q ThinkPad; echo $? ;}
Responder2
Se você for usar este script de shell com uma if
verificação, basta usar -q
como sugerido pelo heemayl:
if sudo dmidecode | grep -q Thinkpad
then
echo "I'm a Thinkpad"
fi
Como o if
bloco verifica o status de saída do comando, podemos confiar grep
diretamente no status de saída em vez de imprimir $?
e compará-lo com outra coisa.
Responder3
Inspirado porA resposta de Heemayl:
sudo dmidecode | grep -q ThinkPad && echo true || echo false
Isso retornará verdadeiro se o ThinkPad for encontrado pelo grep e falso se não for encontrado.
Responder4
sudo dmidecode | grep -c ThinkPad | xargs test 0 -lt
Você precisa reorganizar o comando xargs
and test
e também seus operandos para conseguir o que deseja. Isso retornará um status verdadeiro se houver linhas do ThinkPad diferentes de zero (>0).
Alternativamente, se você quiser manter a ordem dos operandos do comando de teste, você pode fazer
sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0
E então, em ambos os comandos, verifique o $?
valor da variável para determinar o destino do sucesso/falha do grep, da seguinte forma:
if sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0; then
echo "success hooray!"
else
echo nothing
fi