Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ksh: trap ... EXIT

10 réponses
Avatar
Jean-Marc Bourguet
J'ai un script qui contient

trap "rm /tmp/nom.$$" EXIT

mais pourtant il me reste parfois des fichiers nom.$$.

J'ai remarque que c'etait quand j'arretais le script par ^C, mais pas
systematiquement, parfois le rm est execute, parfois pas. Mettre un
trap sur SIGINT ne change pas ce comportement.

Est-ce que quelqu'un a une idee d'ou cela peut provenir?

Si ca peut aider, ksh de Solaris

--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org

10 réponses

Avatar
Stephane Chazelas
On 19 Jan 2006 13:31:03 +0100, Jean-Marc Bourguet wrote:

J'ai un script qui contient

trap "rm /tmp/nom.$$" EXIT

mais pourtant il me reste parfois des fichiers nom.$$.

J'ai remarque que c'etait quand j'arretais le script par ^C, mais pas
systematiquement, parfois le rm est execute, parfois pas. Mettre un
trap sur SIGINT ne change pas ce comportement.

Est-ce que quelqu'un a une idee d'ou cela peut provenir?
[...]


trap exit INT TERM HUP

?

Aussi, terminer son script par "exit" (pas tant pour declencher
la trap sur exit que pour eviter une optimisation de ksh qui
fait que les traps ne sont pas executees lors de la derniere
commande (ksh fait un exec(la commande)).

La gestion des signaux est un immense bordel quelque soit le
shell, dans tous les cas.

C'est quelle version de Solaris et de ksh?

--
Stephane

Avatar
Vincent Lefevre
Dans l'article ,
Stephane Chazelas écrit:

La gestion des signaux est un immense bordel quelque soit le
shell, dans tous les cas.


Je confirme! :)

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA

Avatar
Jean-Marc Bourguet
Stephane Chazelas writes:

On 19 Jan 2006 13:31:03 +0100, Jean-Marc Bourguet wrote:

J'ai un script qui contient

trap "rm /tmp/nom.$$" EXIT

mais pourtant il me reste parfois des fichiers nom.$$.

J'ai remarque que c'etait quand j'arretais le script par ^C, mais pas
systematiquement, parfois le rm est execute, parfois pas. Mettre un
trap sur SIGINT ne change pas ce comportement.

Est-ce que quelqu'un a une idee d'ou cela peut provenir?
[...]


trap exit INT TERM HUP

?


Ca ne fonctionne pas mieux.

Il me semble que c'est lie a un

set -e

mais mettre aussi un trap sur ERR ne fait pas ce que je veux.

C'est quelle version de Solaris et de ksh?



Aussi, terminer son script par "exit" (pas tant pour declencher
la trap sur exit que pour eviter une optimisation de ksh qui
fait que les traps ne sont pas executees lors de la derniere
commande (ksh fait un exec(la commande)).


Marche pas mieux non plus.

La gestion des signaux est un immense bordel quelque soit le shell,
dans tous les cas.


J'ai pas trop envie de reecrire ce script qui a part ca fait ce dont
j'ai besoin et de plus je n'en ai vraiment pas le temps. Je vais
finir par laisser les choses en l'etat.

A+

--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Jean-Marc Bourguet
Jean-Marc Bourguet writes:

C'est quelle version de Solaris et de ksh?



Arg, j'oublie.

SunOS 5.8

La version de ksh est celle d'origine avec les patchs qu'on nous a
installe. Si tu m'indiques comment trouve plus precis, je le fais.

A+

--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Jean-Marc Bourguet
Jean-Marc Bourguet writes:

Jean-Marc Bourguet writes:

C'est quelle version de Solaris et de ksh?



Arg, j'oublie.

SunOS 5.8

La version de ksh est celle d'origine avec les patchs qu'on nous a
installe. Si tu m'indiques comment trouve plus precis, je le fais.


J'ai l'impression que les traps ne sont pas traites pendant
l'execution d'une fonction. Ajouter une instruction trap dans la
fonction a l'air de faire affaire sur un exemple simplifie.

L'effet est bizarre, si on n'a pas de trap dedans, apres la fonction
le trap mis globalement fonctione. Si il y a un trap mis dans la
fonction, celui-ci est execute aussi apres le retour de la fonction.

A+

--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org



Avatar
Stephane Chazelas
On 19 Jan 2006 15:07:56 +0100, Jean-Marc Bourguet wrote:
Jean-Marc Bourguet writes:

Jean-Marc Bourguet writes:

C'est quelle version de Solaris et de ksh?



Arg, j'oublie.

SunOS 5.8

La version de ksh est celle d'origine avec les patchs qu'on nous a
installe. Si tu m'indiques comment trouve plus precis, je le fais.


J'ai l'impression que les traps ne sont pas traites pendant
l'execution d'une fonction. Ajouter une instruction trap dans la
fonction a l'air de faire affaire sur un exemple simplifie.
[...]


Je crois que ca depend de comment les fonctions sont declarees:

f() {
}

ou

function f {
}

A voir.

Tu as essayé avec pdksh (qui ne fait pas de distinction entre
les deux) ou avec zsh en mode ksh?

--
Stephane




Avatar
Jean-Marc Bourguet
Stephane Chazelas writes:

On 19 Jan 2006 15:07:56 +0100, Jean-Marc Bourguet wrote:
Jean-Marc Bourguet writes:

Jean-Marc Bourguet writes:

C'est quelle version de Solaris et de ksh?



Arg, j'oublie.

SunOS 5.8

La version de ksh est celle d'origine avec les patchs qu'on nous a
installe. Si tu m'indiques comment trouve plus precis, je le fais.


J'ai l'impression que les traps ne sont pas traites pendant
l'execution d'une fonction. Ajouter une instruction trap dans la
fonction a l'air de faire affaire sur un exemple simplifie.
[...]


Je crois que ca depend de comment les fonctions sont declarees:

f() {
}

ou

function f {
}

A voir.


Ca n'a pas l'air.

Avec bash non plus, mais lui a le comportement que j'attends dans les
deux cas.

Tu as essayé avec pdksh (qui ne fait pas de distinction entre les
deux) ou avec zsh en mode ksh?


Ils ne sont pas dispo ici (du moins sur les Sun)

--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org





Avatar
ts
"J" == Jean-Marc Bourguet writes:






J> J'ai l'impression que les traps ne sont pas traites pendant
J> l'execution d'une fonction. Ajouter une instruction trap dans la
J> fonction a l'air de faire affaire sur un exemple simplifie.

Ceci correspond il à ce que vous avez ?

Functions execute in the same process as the caller and
share all files and present working directory with the
caller. Traps caught by the caller are reset to their
default action inside the function.


--

Guy Decoux





Avatar
Jean-Marc Bourguet
ts writes:

"J" == Jean-Marc Bourguet writes:






J> J'ai l'impression que les traps ne sont pas traites pendant
J> l'execution d'une fonction. Ajouter une instruction trap dans la
J> fonction a l'air de faire affaire sur un exemple simplifie.

Ceci correspond il à ce que vous avez ?

Functions execute in the same process as the caller and
share all files and present working directory with the
caller. Traps caught by the caller are reset to their
default action inside the function.


Oui. A part que l'effet a l'exterieur de la fonction est bizarre:
quand on a mis un trap, il reste; quand on n'en a pas mis, l'ancien
revient.

A+

--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org






Avatar
ts
"J" == Jean-Marc Bourguet writes:






J> Oui. A part que l'effet a l'exterieur de la fonction est bizarre:
J> quand on a mis un trap, il reste; quand on n'en a pas mis, l'ancien
J> revient.

Si c'est pour EXIT, il semble avoir un comportement particulier. Mieux
vaut voir la page man d'où est extrait le précédent paragraphe :-)

--

Guy Decoux