Come ottenere il nome del dispositivo Wi-Fi macOS a livello di programmazione nello script Bash?

0
bash% networksetup -listnetworkserviceorder
An asterisk (*) denotes that a network service is disabled.
(1) SAMSUNG Modem
(Hardware Port: Modem (SAMSUNG_MDM), Device: SAMSUNG_MDM)

(2) Ethernet
(Hardware Port: Ethernet, Device: en0)

(3) FireWire
(Hardware Port: FireWire, Device: fw0)

(4) Wi-Fi
(Hardware Port: Wi-Fi, Device: en1)

(5) Bluetooth PAN
(Hardware Port: Bluetooth PAN, Device: en2)

Questo è buono per la lettura, ma come faccio a ottenere 'en1' a livello di codice in uno script Bash in modo da poter usare il nome del dispositivo in un cron job?

    
posta qazwsx 08.01.2017 - 22:27
fonte

2 risposte

0

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 .

    
risposta data 09.01.2017 - 01:04
fonte
1

È possibile reindirizzare l'output grep awk e cut come opzione:

networksetup -listnetworkserviceorder | grep -i "Wi-Fi, Device" | awk '{ print $5 }' | cut -c 1-3

Puoi anche utilizzare system_profiler per ottenere dettagli sul tuo adattatore AirPort:

system_profiler SPAirPortDataType

Quindi, puoi nuovamente, reindirizzare l'output tramite grep per ottenere l'adattatore:

system_profiler SPAirPortDataType | grep Interfaces -A1

    
risposta data 08.01.2017 - 22:30
fonte

Leggi altre domande sui tag