0

我有不同的具有 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

4

1 回答 1

1

nordvpn-server-find我在脚本中使用的也与粗体和彩色字体的控制序列相呼应。在将输出输入nmcli.

于 2021-12-18T15:22:11.953 回答