[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



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,
-- 
Étienne Mollier <etienne.mollier@mailoo.org>


Reply to: