因此,我编写了这个垃圾 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
输入之一,是()。shuf
1
-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
请注意,除非绝对必要,否则不要使用全部大写(带下划线)作为用户定义的变量名,以避免可能覆盖环境变量。