2 votos

¿Cómo obtener macOS nombre del dispositivo Wi-Fi mediante programación en Bash script?

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 la lectura pero, ¿cómo puedo obtener 'en1' mediante programación en un script de Bash para que pueda utilizar el nombre del dispositivo en un trabajo de cron?

3voto

user3439894 Puntos 5883

En su pregunta, sé que usted utiliza networksetup -listnetworkserviceorder sin embargo yo uso la networksetup -listallhardwareports , en cambio, como es más fácil analizar el resultado de usar awk, por sí mismo, con un mínimo de codificación a fin de evitar múltiples tuberías utilizando varios otros comandos como se ofrece en la otra respuesta y debe ser lo suficientemente robusta como para producir una salida coherente hasta que Apple cambia el formato de salida de networksetup -listallhardwareports, si es que alguna vez lo hacen.

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

Buscando en las líneas relevantes de salida:

Hardware Port: Wi-Fi
Device: en0

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

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

Puede ser asignado a una variable:

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

Usted puede utilizar $wifiDevice más tarde en la secuencia de comandos para representar en0, en este ejemplo.

Obviamente en su sistema, basado en la salida en su pregunta, $wifiDevice sería: en1


Si desea utilizar networksetup -listnetworkserviceordera continuación, puede utilizar awk, por sí mismo, de esta manera:

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

Sin embargo, yo uso mi primer ejemplo sobre esto.


También me gustaría alejarse de usar system_profiler en este caso, ya que toma mucho más tiempo para que la salida sea generado, a continuación, cuando se utiliza networksetup.

1voto

Douglas Puntos 10417

Puede tubo 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 se puede utilizar system_profiler para obtener detalles acerca de su adaptador de aeropuerto:

system_profiler SPAirPortDataType

Entonces, usted puede, tubo de salida con grep para obtener el adaptador:

system_profiler SPAirPortDataType | grep Interfaces -A1

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X