close() dans bash (ou anysh)

Jeremy Monnet jmonnet at gmail.com
Sat Feb 25 02:10:23 CET 2006


On 2/24/06, Philippe Jacquot <philippe.j at sparx.com> wrote:
> Oui, oui, de fait. Un exec, c'est juste le process qui charge un nouveau
> code, mais garde l'environnement, les descripteurs, etc... donc pas de fork.
> En l'occurence, "exec -a  bidule machin", charge le code de "machin" et,
> si je comprend bien le man, devrait mettre "bidule" dans $0.
> Or $0 ne change pas après l'exec. So what's dat -a ?
>
> Par exemple, avec le code suivant (/tmp/truc):
> #!/bin/sh
> echo $0 $@
> exec -a bidule $0
>
> J'aurai pensé avoir une première ligne avec "/tmp/truc", puis les autres
> avec "bidule". Mais que nenni.
> D'où ma perplexité.  :)
>
> thx qd mm et a +
>
Quelques essais en plus :
dans 1 repertoire j'ai 1 script shell :
#!/bin/bash
echo "0 : $0"

 et un executable C :
#include <stdio.h>
int main(int argc, char ** argv) {
printf("argv[0] : %s", argv[0]);
return 0;
}

Jusqu'a ce soir je pensais que les 2 étaient équivalents, pourtant :
gnu:~/test_fork_script# sh
gnu:~/test_fork_script# exec -a bla ./script_exec.sh
0 : /root/test_fork_script/script_exec.sh
gnu:~/test_fork_script# sh
gnu:~/test_fork_script# exec -a bla ./essai_exec
argv[0]: bla
gnu:~/test_fork_script# sh
gnu:~/test_fork_script# exec -ca bla ./script_exec.sh
Segmentation fault

l'option -c est censé passée un environnement vide ... drole le segfault !
Blague a part, toutes les options fonctionnent ... presque.

le premier argument est bien mis a jour, mais pour une raison que
j'ignore, ca n'est pas pris en compte dans les scripts shell.

Jeremy
--
Linux Registered User #317862
Linux From Scratch Registered User #16571
Please do not send me .doc, .xls, .ppt, as I will *NOT* read them.



More information about the Shell mailing list