Você pode verificar se o script está sendo executado dentro de screen
e, caso contrário, execute-o novamente em screen
:
#! /bin/bash
[[ -z $STY ]] && screen -S vpn -d -m "$0" "$@"
if [ "$1" = "seed-rl" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config seed-rl.ovpn
fi
...
STY
é uma variável definida por screen
, que podemos usar para detectar se estamos em execução nisso. $0
é o comando atual sendo executado e $@
todos os argumentos.
Além disso, considere simplificar seu script usando matrizes associativas:
#! /bin/bash
[[ -z $STY ]] && screen -S vpn -d -m "$0" "$@"
declare -A configs
config['seed-rl']='seed-rl.ovpn'
config['atl10']='Atlanta-10.ovpn'
# ... etc.
config['nyc11']='NewYork-11.ovpn'
cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config "${config[$1]}.ovpn"
E usando as regras NOPASSWD
sudoers
em vez de armazenar sua senha em texto não criptografado.