Sie haben Ihre Frage mit bash
getaggt, also beantworte ich sie so, als würde ich fragen, wie man das in bash macht, anstatt zu fragen, welche Sprache verwendet werden soll (was die Frage off-topic für StackOverflow wäre).
Sie können vorhandene Daten aus system_profiler mit integrierten Tools analysieren. Zum Beispiel, hier ist ein Abwerfen des Anbieter: Produktpaar, mit „Location ID“ und Herstellern ...
#!/bin/bash
shopt -s extglob
while IFS=: read key value; do
key="${key##+()}"
value="${value##+()}"
case "$key" in
"Product ID")
p="${value% *}"
;;
"Vendor ID")
v="${value%% *}"
;;
"Manufacturer")
m="${value}"
;;
"Location ID")
l="${value}"
printf "%s:%s %s (%s)\n" "$v" "$p" "$l" "$m"
;;
esac
done < <(system_profiler SPUSBDataType)
Dies beruht auf der Tatsache, dass Location ID
das letzte Element für jedes USB-Gerät, das ich haven‘aufgeführt ist t endgültig überprüft. (Es scheint nur so für mich.)
Wenn Sie möchten, dass (1) einfacher zu lesen ist und (2) nicht von bash abhängig ist und daher portabler ist (kein Problem, alle Macs kommen mit bash), sollten Sie überlegen anstelle von reinem bash in awk Ihr schweres Heben zu tun:
#!/bin/sh
system_profiler SPUSBDataType \
| awk '
/Product ID:/{p=$3}
/Vendor ID:/{v=$3}
/Manufacturer:/{sub(/.*: /,""); m=$0}
/Location ID:/{sub(/.*: /,""); printf("%s:%s %s (%s)\n", v, p, $0, m);}
'
oder vermeiden, auch diese in der Schale Verpackung vollständig mit:
#!/usr/bin/awk -f
BEGIN {
while ("system_profiler SPUSBDataType" | getline) {
if (/Product ID:/) {p=$3}
if (/Vendor ID:/) {v=$3}
if (/Manufacturer:/) {sub(/.*: /,""); m=$0}
if (/Location ID:/) {sub(/.*: /,""); printf("%s:%s %s (%s)\n", v, p, $0, m)}
}
}
Beachten Sie, dass Sie auch die Ausgabe von system_profiler
im XML-Format bekommen:
$ system_profiler -xml SPUSBDataType
Sie benötigen jedoch einen XML-Parser, um diese Ausgabe zu verarbeiten. Und Sie werden feststellen, dass es eine Menge Arbeit ist, XML in nativer Bash zu parsen.
Welche Sprache haben Sie für Linux usw. benutzt? Ich hätte gedacht, dass C ein guter Ausgangspunkt wäre. Basierend auf Linux/OSX Unix-Wurzeln – BillyBigPotatoes
Ich habe C für Linux und C++ für Windows verwendet, aber ich kann auch jede andere Sprache verwenden. – Sceik