Подключитесь к сервису connman, используя первое поле, а не второе - PullRequest
0 голосов
/ 28 сентября 2019

Учитывая следующую таблицу

$ connmanctl services
*AO MyNetwork               wifi_dc85de828967_68756773616d_managed_psk
    OtherNET                wifi_dc85de828967_38303944616e69656c73_managed_psk 
    AnotherOne              wifi_dc85de828967_3257495245363836_managed_wep
    FourthNetwork           wifi_dc85de828967_4d7572706879_managed_wep
    AnOpenNetwork           wifi_dc85de828967_4d6568657272696e_managed_none

Я хотел бы иметь возможность подключиться к сети, например, OtherNET, используя строку OtherNET вместо длинной wifi_dc85de828967_38303944616e69656c73_managed_psk, так как яне хочу считать время, когда я нажимаю Tab и / или проверяю, соответствует ли строка wifi_ в приглашении предполагаемой сети.

Возможно ли это с помощью connmanтолько ?Или я действительно должен написать обертку сам?

Страница man connmanctl содержит

   services
          Shows a list of all available services. This  includes  the
          nearby wifi networks, the wired ethernet connections, blue‐
          tooth devices, etc.  An asterisk in front  of  the  service
          indicates that the service has been connected before.

и

   connect service
          Connects  to  the  given  service. Some services need a so-
          called provisioning file in order to connect to  them,  see
          connman-service.config(5).

, которые мало что говорят о формате вывода или использовании команды.

Аналогично, вики в Arch Linux относятся кпоследний столбец как второе поле, начинающееся с wifi_.

1 Ответ

0 голосов
/ 29 сентября 2019

Поскольку никто еще не ответил, я нашел свободное время для кодирования следующей обертки, которая в основном выполняет следующее:

  • продолжает читать, пока ввод не равен exit;
  • когда предоставляется ввод, начинающийся с connect, следующее слово используется для сопоставления с образцом одной строки (только первая совпадающая строка) из connman services;последнее поле этой строки (начинающееся с wifi_) пересылается на connmanctl connect;
  • , любой другой непустой ввод пересылается на connmanctl как есть.
  • определенное число (передаваемое через переменную NOINPUTS_BEFORE_EXIT по умолчанию 3) пустых входных данных приводит к тому, что сценарий exit.

Этот сценарий следующий

#!/usr/bin/env bash
name=$(basename $0)
noinputs_before_exit=${NOINPUTS_BEFORE_EXIT:=3}
while [[ $cmd != 'exit' ]]; do
  echo -n "$name " 1>&2
  read cmd
  if [[ -z "$cmd" ]]; then
    (( --noinputs_before_exit == 0 )) && exit
  else
    noinputs_before_exit=$NOINPUTS_BEFORE_EXIT
    if [[ $cmd =~ ^connect\  ]]; then
      connmanctl connect $(connmanctl services | awk '/'"${cmd#* }"'/ { print $NF; exit }')
    else
      connmanctl $cmd
    fi
  fi
done

Ограничения сценария, по крайней мере, следующие:

  • (для меня менее важно) Я понятия не имею, соответствует ли оно каким-либо требованиям безопасности;
  • это не такallow Tab -completion;
  • (главное для меня) - он не использует библиотеку readline, поэтому редактирование строки невозможно.
...