Bash 随机化函数错误

Bash 随机化函数错误

因此,我编写了这个垃圾 bash 脚本,它从 100 多个 ovpn 配置文件池中随机连接到 vpn 服务器:

test {

_OVPNs="/path/to/OVPNs"
_RANDOM=$(shuf -e 1 -n 1 ${_OVPNs}/*)

    sudo openvpn --config ${_RANDOM}
}

它大多数时候运行良好,但偶尔会产生奇怪的错误:

sudo openvpn --config 1

或者

Options error: In [CMD-LINE]:1: Error opening configuration file: 1
Use --help for more information.

知道为什么随机播放的结果偶尔会被指定为“1”吗?

答案1

您获得的输出作为混洗的1输入之一,是()。shuf1-e 1 ...

您需要使用数组传递所有可能的元素:

_ovpns=( /path/to/OVPNs/* )
shuf -e "${ovpns[@]}" -n 1 

或者直接这样做:

shuf -e /path/to/OVPNs/* -n 1

将目录名称作为变量:

_ovpns='/path/to/OVPNs'
shuf -e "${_ovpns}"/* -n 1

请注意,除非绝对必要,否则不要使用全部大写(带下划线)作为用户定义的变量名,以避免可能覆盖环境变量。

相关内容