我有不同的具有 vpn 配置的 .ovpn 文件。我编写了一个脚本,它检查可用服务器的负载并尝试与负载最小的服务器连接。我的问题是描述 Connection NetworkManager 将选择的字符串变量在nmcli
从脚本中的数组调用时无法识别。
我在脚本中以这种方式连接和连接:
top="${TOP_TEN[$iters]}.tcp"
nmcli con up $top --ask
这里nmcli
抛出一个未知的连接错误。我之前尝试回显$top
变量并尝试手动连接,效果很好。此示例中的变量是“bg52.nordvpn.com.tcp”。
然后我写了另一个 4 班轮,看看我的连接是否搞砸了:
TOP_TEN=(vpn1 vpn2 bg52.nordvpn.com vpn4)
echo ${TOP_TEN[2]}.tcp
top="${TOP_TEN[2]}.tcp"
nmcli con up $top --ask
同样在这里它也可以正常工作。
有人理解为什么我的 ovpn 连接在从 bash 数组作为字符串传递时无法识别吗?
如果它可以帮助您更好地理解问题,这是完整的脚本。
#!/usr/bin/bash
OVPN_FILES="/usr/lib/python3.10/site-packages/openpyn/files/ovpn_tcp"
COUNTRY_CODE=$1
TOP_TEN=()
function get_top_servers() {
TOP_TEN=()
while IFS= read -r server; do
TOP_TEN+=( $server )
done < <( nordvpn-server-find -n 10 -l $1 | tail -n 10 | tr -s " " | cut -d\ -f 1 )
}
function get_rand_ccode() {
rand_countr_code=`ls $OVPN_FILES | cut -c1-2 | uniq | shuf | head -n 1`
}
function old_con_down() {
ACTIVE_VPN=`nmcli c show --active | grep vpn | tr -s " " | cut -d\ -f 2`
if [ ! -z "$ACTIVE_VPN" ]; then
echo "Found active connection. Deactivating $ACTIVE_VPN ... "
nmcli con down $ACTIVE_VPN
# sleep 3
fi
}
if [ -z "$COUNTRY_CODE" ]; then
echo "set ccode"
COUNTRY_CODE=$(get_rand_ccode)
fi
echo "Get Top Servers for $COUNTRY_CODE"
get_top_servers $COUNTRY_CODE
iters=0
while [ 1 ]
do
if (( $iters > 9 )); then
COUNTRY_CODE=$(get_rand_ccode)
get_top_servers $COUNTRY_CODE
iters=0
fi
old_con_down
echo "Fastest Server is ..."
top="${TOP_TEN[$iters]}.tcp"
echo "${TOP_TEN[@]}"
nmcli con up $top --ask
if [ -z $? ]; then
exit 1
else
((iters++))
fi
done