[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Lancer un script shell linux lors de la fermeture du terminal, avec la croix



Le 18/02/2018 à 21:19, Étienne Mollier a écrit :
> G2PC, le 2018-02-18 :
>> Oui, si je lance le script, un fichier est créé, contenant la
>> date.  Non, le fichier n'est pas créé lorsque je quitte le
>> terminal avec la croix. J'ai tenté de le fermer au bout d'une
>> minute, mais, la date est ajoutée dans le fichier texte au
>> lancement du script, pas à la fermeture de la fenêtre.
> De ce que vous décrivez, la fonction rattachée à l'évènement
> s'exécuterait donc dès la déclaration de la fonction ; il y a
> peut-être un bug dans votre essai.
>
> Voici un script qui m'a permis de faire des tests plus poussés
> pour simuler un installateur classique :
>
> 	#!/bin/bash
> 	set -e
> 	set -v
> 	
> 	# Creating an installation directory with a unique name,
> 	# to avoid concurrency issues.
> 	INSTALLDIR="$(mktemp -d installdir.XXXXXX)"
> 	
> 	# Setting up cleanup of the installation directory on
> 	# exit.  WARNING: do not use `cd` in the script, as
> 	# INSTALLDIR is a relative path.
> 	clean-installdir () {
> 		rm -r "$INSTALLDIR"
> 	}
> 	trap clean-installdir EXIT
> 	
> 	# Installing...
> 	printf "Installation in progress in %s\n" "$INSTALLDIR"
> 	# The sleeping simulates the time it would take for a
> 	# real installation to occur.  You can close the program
> 	# in any way you wish, to do some tests, in this time
> 	# frame.
> 	sleep 10
> 	
> 	# Everything went well for the script
> 	printf "%s\n" "Done."
> 	
> 	# Note that you should see execution of clean-installdir
> 	# here, as the program is exiting.  :-)
>
> Si je ferme le programme à coup de <C-c>, ou si je clos la
> fenêtre avec le raccourci clavier de mon gestionnaire de fenêtre,
> le répertoire d'installation est effacé.  Si je laisse le
> programme s'exécuter jusqu'au bout, c'est aussi le cas /sans/
> appeler explicitement la fonction ; ce qui, soit dit en passant,
> est cool.
>
> Si je ferme la fenêtre de mon terminal avec le programme xkill,
> le script reçoit un signal KILL impossible à capter.  Par
> conséquent, le répertoire d'installation reste présent à côté du
> script, et doit être effacé manuellement.  Il se peut que
> certains gestionnaires de fenêtres aient ce genre de comportement
> pour lutter contre les fenêtres récalcitrantes.  Je n'ai testé
> que dwm de mon côté, mais il y en a d'autres : xfwm4, metacity,
> kwin, awesome, fvwm, openbox, et j'en passe.
>
>
>> Si le script ne fini pas normalement, ce n'est pas trop grâve,
>> un dossier installeur restera présent dans le répertoire
>> utilisateur.  J'ai pu lire d'avantage, sur mktemp :
>> https://www.visionduweb.eu/wiki/index.php?title=Programmation_en_Shell_Bash_Linux#Cr.C3.A9er_un_fichier_temporaire_avec_mktemp
>> C'est une solution intéressante !
>>
>> Malgré tout, ma question reste posée, avec un exemple, si il est
>> possible de lancer un script au moment de la fermeture d'un
>> terminal, avec la croix.
>> C'est surement inutile, puisque d'autres possibilités comme
>> mktemp sont adaptées.
> Gardez la commande mktemp en tête, elle ne remplace pas le mécano
> avec trap, mais elle participe à régler les problèmes de
> concurrence mentionnés dans mon précédent courriel.
>
>
> À plus,

Ici, effectivement, le fichier va être nettoyé automatiquement à la fin
de l'installation, ou, immédiatement, quand je ferme le terminal avec la
croix.
C'est tout à fait ce que j'attendais comme retour, et, oui, ça
fonctionne plutôt bien.

Noter que, il faut bien lancer le script en bash, avec sh, ça ne
fonctionnera pas.

Je note également que certains tueurs de programmes pourront empêcher le
bon fonctionnement du script, si trap n'est pas appelé normalement.

Bonne soirée, bonne fin de week end.
Merci beaucoup pour l'exemple.



Reply to: