Erro de função de aleatoriedade bash

1

Então, eu escrevi este script bash que se conecta aleatoriamente a um servidor vpn de um pool de mais de 100 arquivos de configuração:

test {

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

    sudo openvpn --config ${_RANDOM}
}

Funciona bem na maior parte do tempo, mas ocasionalmente produz erros estranhos:

sudo openvpn --config 1

ou

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

Alguma ideia do motivo pelo qual "1" é ocasionalmente atribuído como resultado do shuffle?

    
por captain21 26.12.2016 / 04:32

1 resposta

2

Você está recebendo 1 como a saída, já que uma das entradas para shuf para embaralhar é 1 ( -e 1 ... ).

Você precisa passar todos os elementos possíveis usando uma matriz:

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

ou diretamente:

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

Tomando o nome do diretório como uma variável:

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

Observe que, a menos que seja absolutamente necessário, não use todos os uppercases (com sublinhado) como nome de variável definido pelo usuário para evitar a substituição potencial de variáveis de ambiente.

    
por heemayl 26.12.2016 / 04:40