Bonjour,
> Comment lancer un script shell linux lors de la fermeture du > terminal, avec la croix. ... ? On peut potentiellement déjà avoir des problèmes dépendant de la façon dont le gestionnaire de fenêtre utilisé ferme les fenêtres avec la croix, s'il y a une croix... :-) Normalement, tous le font de manières à laisser le temps à l'application d'exécuter des tâches de nettoyage avant de quitter, mais on peut avoir des surprises, en particulier si un signal SIGKILL, qui ne peut de toute façon pas être trap'é, est lancé trop tôt... > J'ai vu sur un forum qu'il serrait question d'utiliser SIGHUP. > > Je n'ai pas réussi à reproduire l'exemple proposé. ( appel de > fonction "a" qui écrit correctement dans un fichier de logs , > trap "a" ) Effectivement d'après le manuel signal(7) ça aurait pu avoir du sens : Signal Value Action Comment ────────────────────────────────────────────────────────────────────── SIGHUP 1 Term Hangup detected on controlling terminal or death of controlling process Mais à l'usage, ça ne passe pas. Il me semble que ce signal est plutôt utilisé pour recharger la configuration des dæmons sans avoir à les redémarrer, ou ce genre de chose, désormais. Il pourrait néanmoins y avoir une solution. Si le shell utilisé est bash, alors il est possible de spécifier un pseudo signal EXIT à la commande trap (pas SIGEXIT, ce n'est pas un signal inter processus à proprement parler). Le code suivant permet par exemple d'enregistrer la dernière fermeture de shell (testé avec le gestionnaire dwm en faisant l'équivalent d'un clic sur une hypothétique croix) : last-exit () { printf '%s\n' "$(date --rfc-2822)" > ~/.lastexit } trap last-exit EXIT L'explication détaillée à propos de EXIT (et de quelque signaux bonus) est disponible dans le manuel de bash, ou bien en sortie de la commande : $ help trap trap: trap [-lp] [[arg] signal_spec ...] Trap signals and other events. Defines and activates handlers to be run when the shell receives signals or other conditions. [...] If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell. If [...] Ça marche avec le bash de Debian Sid, je n'ai pas testé avec les autres niveaux de Debian, donc je ne saurais dire si c'est une solution éprouvée ou bien si c'est une nouveauté. :-) Une autre solution exploitant le fichier ~/.bash_logout aurait pu être envisagée mais suppose que la fenêtre de terminal a été lancée avec `bash -l` et non `bash` tout court, qui est une commande par défaut usuelle. De plus, le nettoyage s'appliquerait à toute session utilisateur, et pas seulement dans le contexte de votre script. > J'aimerais pouvoir déclancher la suppression d'un dossier, si > l'utilisateur de quitte pas mon script avec la commande EXIT du > menu que j'ai créé. Juste pour éviter les cafouillages, le EXIT que je mentionne est une entité différente du EXIT de votre menu. Soyez prudents avec les situations de concurrence également. Qu'est ce qui se passe quand un terminal dans un autre contexte est fermé avec la croix ? Est ce que ça va déclencher le script de nettoyage ? Est ce bienvenu ? Et si le programme tourne dans d'autres terminaux, comment se comporte le nettoyage ?... À plus, -- Étienne Mollier <etienne.moll...@mailoo.org>