使用第一个字段而不是第二个字段连接到connman服务

时间:2019-09-28 09:35:15

标签: connman

给出下表

$ 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的{​​{1}}页包含

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.

对于输出的格式或命令的使用都没有多说。

类似地,wiki on Arch Linux将最后一列称为 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). 开头的第二个字段。

1 个答案:

答案 0 :(得分:0)

由于没有人回答,所以我找到了一些空闲时间来编写以下包装器,基本上可以完成以下操作

  • 只要输入的内容不是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

脚本限制至少如下:

  • (对我来说更重要的是)我不知道它是否满足任何安全要求;
  • 不允许 Tab 完成;
  • (对我来说最重要的是)它不使用readline库,因此行编辑是不可能的。