Ich versuche herauszufinden, ob es sich bei einem Gerät um ein ThinkPad handelt oder nicht, indem ich Folgendes verwende:
sudo dmidecode | grep ThinkPad
Ich möchte, dass das Endergebnis „true“ oder „false“ (oder 1/0) zurückgibt.
Ich denke, die Lösung könnte etwa so aussehen:
sudo dmidecode | grep -c ThinkPad | test xargs -gt 0
Aber ich bin nicht sicher, wie ich es xargs
hier richtig verwende.
Antwort1
Fügen Sie einfach die Exit-Statusprüfung danach hinzu grep
. Standardmäßig wird immer der Exit-Status vom letzten Befehl der Pipeline abgerufen:
sudo dmidecode | grep -q ThinkPad; echo $?
Verwenden Sie es -q
, um jegliche Ausgabe zu unterdrücken, grep
da wir nur am Beendigungsstatus interessiert sind.
Sie können bei Bedarf die Befehlsgruppierung verwenden, dies ist hier jedoch etwas überflüssig:
sudo dmidecode | { grep -q ThinkPad; echo $? ;}
Antwort2
if
Wenn Sie dies als Shell-Skript mit einer Prüfung verwenden möchten , verwenden Sie einfach -q
das von heemayl vorgeschlagene:
if sudo dmidecode | grep -q Thinkpad
then
echo "I'm a Thinkpad"
fi
Da der if
Block den Beendigungsstatus des Befehls prüft, können wir uns grep
direkt auf den Beendigungsstatus verlassen, anstatt $?
ihn auszudrucken und mit etwas anderem zu vergleichen.
Antwort3
Inspiriert vonHeemayls Antwort:
sudo dmidecode | grep -q ThinkPad && echo true || echo false
Dies gibt „true“ zurück, wenn ThinkPad von grep gefunden wird, andernfalls „false“.
Antwort4
sudo dmidecode | grep -c ThinkPad | xargs test 0 -lt
Sie müssen den Befehl xargs
und test
dessen Operanden neu anordnen, um das gewünschte Ergebnis zu erzielen. Dies gibt einen wahren Status zurück, wenn ThinkPad-Zeilen ungleich Null (>0) enthalten.
Alternativ können Sie, wenn Sie die Operandenreihenfolge des Testbefehls beibehalten möchten, Folgendes tun:
sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0
Überprüfen Sie anschließend in beiden Befehlen den $?
Wert der Variablen, um das Schicksal von greps Erfolg/Misserfolg wie folgt zu bestimmen:
if sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0; then
echo "success hooray!"
else
echo nothing
fi