¿Cómo obtener el nombre del dispositivo Wi-Fi macOS mediante programación en el 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)

Esto es bueno para leer, pero ¿cómo obtengo 'en1' programáticamente en un script Bash para que pueda usar el nombre del dispositivo en un trabajo cron?

    
pregunta qazwsx 08.01.2017 - 22:27

2 respuestas

0

En tu pregunta, sé que usaste networksetup -listnetworkserviceorder ; sin embargo, usaría networksetup -listallhardwareports , ya que es más fácil analizar la salida usando awk , por sí mismo, con un mínimo de codificación para evitar múltiples pipe usa varios otros comandos como se ofrecen en la otra respuesta y debe ser lo suficientemente robusto como para producir una salida consistente hasta que Apple cambie el formato de salida de networksetup -listallhardwareports , si alguna vez lo hacen.

Como ejemplo en mi sistema, networksetup -listallhardwareports muestra lo siguiente:

$ 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
===================
$ 

Mirando las líneas relevantes de salida:

Hardware Port: Wi-Fi
Device: en0

La forma más fácil de obtener en0 , en este ejemplo es:

networksetup -listallhardwareports | awk '/Wi-Fi/{getline; print $2}'

Se puede asignar a una variable:

wifiDevice="$(networksetup -listallhardwareports | awk '/Wi-Fi/{getline; print $2}')"

Luego, puede usar $wifiDevice más adelante en el script para representar en0 , en este ejemplo.

Obviamente en tu sistema, según el resultado de tu pregunta, $wifiDevice sería: en1

Si desea usar networksetup -listnetworkserviceorder , entonces puede usar awk , de esta manera:

networksetup -listnetworkserviceorder | awk '{gsub(/\)/, "")}/Wi-Fi, Device/{print $5}'

Sin embargo, usaría mi primer ejemplo sobre esto.

También me mantendría alejado de usar system_profiler en este caso, ya que toma mucho más tiempo para que se genere la salida que cuando se usa networksetup .

    
respondido por el user3439894 09.01.2017 - 01:04
1

Puede canalizar la salida grep awk y cut como una opción:

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

También puede usar system_profiler para obtener detalles sobre su adaptador AirPort:

system_profiler SPAirPortDataType

Luego, puedes nuevamente, canalizar esa salida a través de grep para obtener tu adaptador:

system_profiler SPAirPortDataType | grep Interfaces -A1

    
respondido por el Allan 08.01.2017 - 22:30

Lea otras preguntas en las etiquetas