Nella tua domanda, so che hai usato networksetup -listnetworkserviceorder
, ma invece userei networksetup -listallhardwareports
perché è più semplice analizzare l'output utilizzando awk
, di per sé, con un minimo di codifica in modo da evitare più pipe utilizzando diversi altri comandi come offerto nell'altra risposta e dovrebbe essere abbastanza robusto per produrre un output coerente fino a quando Apple non modificherà il formato di output di networksetup -listallhardwareports
, se mai lo fanno.
Come esempio sul mio sistema, networksetup -listallhardwareports
mostra quanto segue:
$ networksetup -listallhardwareports
Hardware Port: Bluetooth DUN
Device: Bluetooth-Modem
Ethernet Address: N/A
Hardware Port: Display Ethernet
Device: en3
Ethernet Address: xx:xx:xx:xx:xx:xx
Hardware Port: Display FireWire
Device: fw0
Ethernet Address: xx:xx:xx:xx:xx:xx
Hardware Port: Wi-Fi
Device: en0
Ethernet Address: xx:xx:xx:xx:xx:xx
Hardware Port: Bluetooth PAN
Device: en2
Ethernet Address: N/A
VLAN Configurations
===================
$
Osservando le linee di output rilevanti:
Hardware Port: Wi-Fi
Device: en0
Il modo più semplice per ottenere en0
, in questo esempio è:
networksetup -listallhardwareports | awk '/Wi-Fi/{getline; print $2}'
Può essere assegnato a una variabile:
wifiDevice="$(networksetup -listallhardwareports | awk '/Wi-Fi/{getline; print $2}')"
Puoi utilizzare $wifiDevice
in seguito nello script per rappresentare en0
, in questo esempio.
Ovviamente sul tuo sistema, in base all'output nella tua domanda, $wifiDevice
sarebbe: en1
Se vuoi utilizzare networksetup -listnetworkserviceorder
, puoi utilizzare awk
, di per sé, in questo modo:
networksetup -listnetworkserviceorder | awk '{gsub(/\)/, "")}/Wi-Fi, Device/{print $5}'
Tuttavia, utilizzerei il mio primo esempio su questo.
In questo caso, starei lontano dall'utilizzare system_profiler
, poiché richiede molto più tempo per generare l'output quando si utilizza networksetup
.