Formular el problema en términos de "¿qué índice tiene mi red corporativa?" complica el problema. Como sólo quieres saber si está en el primer puesto de la lista, basta con comprobar si el primer puesto de la lista es tu red corporativa.
Zsh
Aquí hay una manera de poner los nombres de red en un array en zsh. Esto utiliza tres anidados expansión de parámetros construye alrededor de una sustitución de comandos:
${(f)$(…)}
divide la salida de la sustitución del comando en líneas ( f
bandera ).
${(@)…##[[:space:]]##}
quita el prefijo que coincide con el patrón [[:space:]]##
, lo que significa uno o más caracteres de espacio en blanco. ( [[:space:]]#
, es decir, cero o más caracteres de espacio en blanco, sería equivalente, ya que eliminar una cadena vacía no tiene ningún efecto). El objetivo es eliminar el tabulador inicial. ${(@)…#$'\t'}
también funcionaría, pero sería frágil en caso de que una versión diferente de MacOS utilice una cantidad diferente de espaciado. El patrón necesita setopt extended_glob
que está desactivado por defecto. La página web @
garantiza que los datos se procesen como una lista de cadenas (lista de líneas del paso anterior) y no como una sola cadena.
-
"${(@)…[2,-1]}"
selecciona los elementos de la matriz desde el segundo (las matrices de zsh comienzan en 1) hasta el último (-1). Esto elimina la línea "Redes preferidas en ". El @
garantiza que cada línea termine en un elemento de matriz distinto. Las comillas dobles garantizan que los espacios dentro de un nombre de red no hagan que cada palabra de un nombre termine en un elemento de matriz separado.
setopt extended_glob
networks=("${(@)${(@)${(f)$(networksetup -listpreferredwirelessnetworks en0)}##[[:space:]]##}[2,-1]}")
Ahora puedes comprobar si el primer elemento es el que quieres:
if [[ $networks[1] != "HOME-OFFICE" ]]; then
…
fi
Si desea el índice (basado en 1) de un nombre de red, puede utilizar la función i
bandera de subíndice del array .
echo $networks[(i)"HOME-OFFICE"]
Sed
Puede utilizar sed para extraer una línea específica por número. Los números de línea empiezan por el 1. Utilice el botón -n
para suprimir la impresión y el p
para imprimir la línea deseada, o utilice el comando d
para eliminar todas las líneas excepto la deseada. Utilice el comando s
para eliminar los espacios en blanco iniciales; tenga en cuenta que hay un carácter de tabulación literal y un espacio dentro de los corchetes. Puede añadir el sufijo p
a la s
para imprimir su salida sin un p
comando.
preferred_network=$(networksetup -listpreferredwirelessnetworks en0 | sed -n '2s/^[ ]*//p')
o
preferred_network=$(networksetup -listpreferredwirelessnetworks en0 | sed -n '2!d; s/^[ ]*//')
Puedes obtener el índice basado en 2 de un elemento por su nombre con sed aplicando la función =
a la(s) línea(s) que coincida(n) con una expresión regular.
line_number=$(networksetup -listpreferredwirelessnetworks en0 | sed -n 's/^[ ]*//; /^HOME-OFFICE$/=')
zero_based_index=$((line_number - 2))
Awk
Puede utilizar awk para extraer una línea específica por número. Los números de línea comienzan en 1, y el número de la línea actual está en el NR
variable. Después de la búsqueda de la línea deseada, elimine el espacio en blanco inicial con la tecla sub
y luego print
la línea. Awk reconoce \t
para significar un carácter de tabulación.
preferred_network=$(networksetup -listpreferredwirelessnetworks en0 | awk 'NR==2 {sub(/^[\t ]*/, ""); print}')
Si quiere el número de una línea con un contenido específico, puede hacer coincidir la línea con una expresión regular o haciendo una comparación de cadenas ( $0
contiene toda la línea sin un carácter de terminación de línea nueva), entonces imprime NR
.
home_office_zero_based_index=$(networksetup -listpreferredwirelessnetworks en0 | awk '{sub(/^[\t ]*/, "")} $0 == "HOME-OFFICE" {print NR - 2})'
o
home_office_zero_based_index=$(networksetup -listpreferredwirelessnetworks en0 | awk '/^[\t ]HOME-OFFICE$/ {print NR - 2})'
0 votos
¿Por qué hay que cambiar la prioridad? ¿Por qué por scriot en lugar de arrastrarlos a un nuevo orden? ¿Alguno de ellos está al alcance de otro? Si no es así, se elegirá la primera disponible en la lista.
0 votos
Encontré este artículo en el aplicación para el aeropuerto que podría ayudar.