web-dev-qa-db-fra.com

Exécuter le script bash dans un écran détaché

Je pourrais utiliser un peu d'aide sur celui-ci. Je suis au mieux un scripteur novice. J'essaye d'écrire un script bash pour me connecter à mes multiples sites openvpn. J'essaie d'écrire le script pour l'ouvrir dans un écran détaché. J'ai réussi à écrire le script pour se connecter aux différents .ovpn via différentes variables. Les faire courir dans l'écran détaché est ce qui me pose problème. En espérant que l'un de vous puisse m'aider. Actuellement, je cours

screen -S vpn

puis une fois l’écran ouvert, j’exécute mon script pour me connecter aux sites openvpn. Ici est mon script de connexion vpn actuel:

#!/bin/bash

if [ "$1" = "seed-rl" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | Sudo -S openvpn --config seed-rl.ovpn
fi

if [ "$1" = "atl10" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | Sudo -S openvpn --config Atlanta-10.ovpn
fi

if [ "$1" = "atl11" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | Sudo -S openvpn --config Atlanta-11.ovpn
fi

if [ "$1" = "atl12" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | Sudo -S openvpn --config Atlanta-12.ovpn
fi

if [ "$1" = "nyc02" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | Sudo -S openvpn --config NewYork-02.ovpn
fi

if [ "$1" = "nyc10" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | Sudo -S openvpn --config NewYork-10.ovpn
fi

if [ "$1" = "nyc11" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | Sudo -S openvpn --config NewYork-11.ovpn
fi

Que puis-je faire pour que ce script s'exécute sur un écran détaché?

3
RobbieL811

Vous pouvez vérifier si le script est en cours d'exécution dans screen et sinon, l'exécuter à nouveau dans 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 EST UNE VARIABLE DÉFINIE PAR screen , que nous pouvons utiliser pour détecter si nous y travaillons. $0 est la commande en cours d'exécution et $@ tous les arguments.

En outre, envisagez de simplifier votre script à l'aide de tableaux associatifs:

#! /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"

Et en utilisant les règles NOPASSWDsudoers au lieu de stocker votre mot de passe en texte clair.

1
muru