j’aimerais ne pas répéter le système de vérification des paquets installés si l’utilisateur est dans la même sessions et qu’il a déjà exécuté le script .sh.
La fonction :
function check_package() {
if [ $(dpkg-query -W -f='${Status}' libwww-perl 2>/dev/null | grep -c "ok installed" 2>&1) -eq 0 ]
then
echo -e "${RED}ERROR${NORMAL}: ${RED}libwww-perl package doesn't appear to be installed, please run ${NORMAL}(${RED}WITH ROOT USER${NORMAL}).${NORMAL}(${RED}Run${NORMAL}: ${RED}aptitude install libwww-perl ${NORMAL}or ${RED}sudo aptitude install libwww-perl${NORMAL})";
#echo -e $"Package perl"
exit 1
elif [ ! -x `which awk` ]; then
echo -e "${RED}ERROR${NORMAL}: ${RED}awk package doesn't appear to be installed, please run ${NORMAL}(${RED}WITH ROOT USER${NORMAL}).${NORMAL}(${RED}Run${NORMAL}: ${RED}aptitude install libwww-perl ${NORMAL}or ${RED}sudo aptitude install libwww-perl${NORMAL})";
exit 1
elif [ $(dpkg-query -W -f='${Status}' bsd-mailx 2>/dev/null | grep -c "ok installed") -eq 0 ]; then
echo -e "${RED}ERROR${NORMAL}: ${RED}bsd-mailx package doesn't appear to be installed, please run ${NORMAL}(${RED}WITH ROOT USER${NORMAL}).${NORMAL}(${RED}Run${NORMAL}: ${RED}aptitude install bsd-mailx or sudo aptitude install bsd-mailx) ${NORMAL}";
exit 1
fi
}
Pour résumé, je me connecte en ssh, je lance ./monbash.sh la première fois, on vérifie les paquets sinon on passe la séquence. Si je me déconnecte on remet à 0 et on refait la procédure.
En espérant avoir été assez précis, je vous remercie.
Une méthode générale pour ne pas exécuter deux fois le même script au même moment est de se servir d’un fichier comme d’un sémaphore.
C’est à dire qu’au début du script on créé un fichier (par exemple [mono]« $HOME »/.semaphores/check_package[/mono]), et on le supprime juste avant la fin du script. Si le fichier existe déjà au début de l’exécution du script, on sait qu’une autre instance du script est en cours d’exécution, donc on quitte.
je me connecte à la machine en ssh ou directement depuis un terminal (si gnome ou autres interfaces…)
je lance le script
il vérifie les paquets
je ferme le script
je ré ouvre le script (et là je veux passer l’étape de vérification)
je me déconnecte de ssh ou depuis le terminal
on reprends la procédure cité ci-dessus.
Est ce plus compréhensible ?
[quote].semaphores[/quote] pourrais tu développer ou me donner un lien car je connaissais pas ou il s’agit d’une redirection à faire et que je peux le nommer comme bon me semble ?
J’ai une solution qui me semble plus propre mais qui t’impose de quitter ta session proprement.
Dans les shell populaire (Zsh, Bash, …) tu as un script qui est lancé à la clôture de la session.
Tout se passe avec le fichier “.logout” normalement.
Mais il me semble que pour qu’il soi exécuter il faut que tu quitte ta session avec un “quit” et non pas fermer ta fenêtre de connexion SSH.
Avec ça tu devrais pouvoir faire ce que tu veux.
Par exemple à la première exécution de ton script tu créé un fichier dans /tmp et quand tu te quitte la session (proprement) tu le supprime. Et à chaque exécution de ton script tu vérifie la présence de ce fichier pour savoir si tu vérifie ce que tu souhaite ou non.
Ceci répondra peut-être à tes besoins, en combinant …
[mono]nohup[/mono] est une commande qui permet de lancer un processus qui restera actif même après la déconnexion de l’utilisateur.
Cette dernière peut s’avérer très utile si on la combine au ‹ & › qui permet de lancer un processus en arrière plan.
$ ssh user@la_bas
$ nohup ./monbash.sh &
$ exit
A chaque utilisation, la commande crée un fichier de log nommé nohup.out, permettant de consulter les messages qui auraient dû s’afficher sur la console.
[quote=“Mimoza”]J’ai une solution qui me semble plus propre mais qui t’impose de quitter ta session proprement.
Dans les shell populaire (Zsh, Bash, …) tu as un script[/quote]
Tu as cette solution qui a l’air pas mal : superuser.com/a/410534.
Si tu es dans des connexions distantes tu peut te baser sur le retour de la commande [mono]tty[/mono] pour savoir si tu es dans une nouvelle session ou pas.