给出下表
$ 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).
开头的第二个字段。
答案 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
脚本限制至少如下:
readline
库,因此行编辑是不可能的。