Puede haber varias maneras diferentes de lograr lo que estás pidiendo, sin embargo, sólo voy a lanzar esto por ahí.
Tengo un MacBook Pro que no tiene puerto Ethernet integrado, así que en mis ejemplos utilizaré Puerto de hardware: Wi-Fi ya que lo he probado en los dos ejemplos de abajo y ha funcionado, sin embargo puedes cambiarlo por Puerto de hardware: Ethernet si es que la salida de
networksetup -listallhardwareports
espectáculos para usted.
Si sólo desea imprimir la dirección IP del dispositivo de destino en stdout
Utiliza el siguiente ejemplo:
$ ipconfig getifaddr $(networksetup -listallhardwareports | awk '/Hardware Port: Wi-Fi/{getline; print $2}')
$ 192.168.1.100
Si quiere asignarlo a un variable en un script Utiliza el siguiente ejemplo:
ipAddress="$(ipconfig getifaddr $(networksetup -listallhardwareports | awk '/Hardware Port: Wi-Fi/{getline; print $2}'))"
Explicación:
La salida pertinente de networksetup -listallhardwareports
para mi sistema es:
Hardware Port: Wi-Fi
Device: en0
Ethernet Address: 28:cf:e3:10:a4:cd
(Nota: Esta no es mi verdadera dirección MAC)
Utilizando $(...)
sustitución de comandos para tener algo que pasar a ipconfig getifaddr <args>
Determino el Nombre del Dispositivo del Puerto de Hardware con la salida de networksetup -listallhardwareports
y la tubería |
a través de awk
que busca Hardware Port: Wi-Fi
y utiliza el get line
que lee la siguiente línea después de la coincide con y se pasa a print $2
que, en esencia, imprime la segunda parte de la línea que sigue al coincide con que en el caso es en0
y que se pasa a ipconfig getifaddr
como su argumento en el primer ejemplo, por ejemplo ipconfig getifaddr en0
. La salida de la cual es la dirección IP.
En el segundo ejemplo, un segundo $(...)
se utiliza alrededor de la compleja línea de comandos utilizada para el stdout
ejemplo para asignarlo al ipAddress
variable cuando se utiliza en un script .
Nota: Esto es realmente un ejemplo, ya que no lo he codificado para tener en cuenta que el dispositivo no funciona. En otras palabras, si el dispositivo no tiene una dirección IP no habrá salida para stdout
y nada asignado al ipAddress
variable en el script . Aunque en el script se puede codificar para comprobar si el ipAddress
variable está vacío y actuar en consecuencia.