Я хочу получить ssid в настоящее время подключенных сетей Wi-Fi в сценарии bash. Я пытаюсь написать сценарий резервного копирования, в котором он будет выполнять резервное копирование на сервер NAS, если он подключен к моей домашней сети Wi-Fi. Я посмотрел на команду ip route
, но она возвращает только некоторую основную информацию -
nmcli -t -f NAME connection show --active
-t
Делает вывод 'кратким' так никакие заголовки-f NAME
Шоу только ssid--active
Шоу только активные соединенияЭта команда возвращает SSID подключенного беспроводного адаптера (при условии, что у вас есть только один).
iwconfig | grep ESSID | sed -e 's/.*ESSID:"\(.*\)".*/\1/'
Он также выводит предупреждение на терминал, но на stderr, так что это не имеет значения
remi@host~$id:~$ id=$(iwconfig | grep ESSID | sed -e 's/.*ESSID:"\(.*\)".*/\1/')
eth0 no wireless extensions.
lo no wireless extensions.
virbr0 no wireless extensions.
tap0 no wireless extensions.
remi@host:~$ echo $id
CISPI
Как насчет iwconfig wlan0 | sed -e '/ESSID/!d' -e 's/.*ESSID:"/"/'
?
Следующее должно предоставить то, что вы ищете, если вы подключены с помощью 1 беспроводного устройства:
nmcli -t -f ssid dev wifi| cut -d\' -f2
Я пробовал это:
iwconfig wlan0 | grep ESSID | cut -d\" -f2
С NetworkManager-1.8.4 это дало правильный результат
LANG=C nmcli -t -f active,ssid dev wifi | grep ^yes | cut -d: -f2-
Существует причина для каждой части команды
LANG=C
, потому что мы используя grep для локализованной строки, так что принудительный английский nmcli ... -f active,ssid ...
заставляет печатать ssid с активным статусом в форме yes:myssid
no:otherssid
grep ^yes
, мы хотим фильтровать активные соединения, но SSID с текстом «да», поэтому это является причиной того, что ^
cut ... -f2-
печатает остальную часть строки после первого разделителя, поэтому мы можем иметь SSID с разделителем в нем