OVH Cloud OVH Cloud

eviter le fork

7 réponses
Avatar
booboo
Salut,
J'ai un petit script qui est censé mettre à jour des patches sur un Solaris
8.

Voici les étapes..

1. il vérifie que patchdiag.xref n'existe pas. S'il existe, il le supprime
2. il fait un wget sur le site de sunsolve, et repatrie le patchdiag.xref.
3. il le renomme (puisqu'il ne se télécharge pas avec le bon nom) en
"patchdiag.xref".

Le problème c'est que le script a l'air d'avoir forké, car il me balance une
erreur que patchdiag.xref n'existe pas, autrement dit il essaie de le
renommer même avant de l'avoir téléchargé.

Voici le code..

###########
## recuperer le patchdiag.xref
###########

##########
## supprimer l'ancien
##########

if (-e patchdiag.xref) {
system ("rm -f patchdiag\.xref") ;
print ("\nAncien versionne supprimee ... veuillez patienter
...\n\n") ;
}

#########
## OK ... aller chercher le nouveau
#########

system ("$chemin_vers_wget $ou_est_autopatch") ;
system ("mv\QpatchDownload.pl?target=patchdiag.xref&method=H\E
patchdiag.xref") ;

Lorsque je lance, j'ai ...

% ./go.pl
--17:10:24--
http://sunsolve.sun.com/pub-cgi/patchDownload.pl?target=patchdiag.xref
=> `patchDownload.pl?target=patchdiag.xref'
Connecting to sunsolve.sun.com:80... sh:
mvpatchDownload.pl?target=patchdiag.xref&method=H: not found

Comment éviter que le program tente de renommer un fichier, avant qu'il
n'existe ?

merci.

7 réponses

Avatar
Laurent Wacrenier
booboo écrit:
if (-e patchdiag.xref) {
system ("rm -f patchdiag.xref") ;
print ("nAncien versionne supprimee ... veuillez patienter
...nn") ;
}
system ("$chemin_vers_wget $ou_est_autopatch") ;
system ("mvQpatchDownload.pl?target=patchdiag.xref&method=HE
patchdiag.xref") ;


Heuu.. vous connaissez une autre commande que system("...") ?

Faitez donc un script shell.

Avatar
booboo
"Laurent Wacrenier" <lwa@ teaser . fr> wrote in message
news:
booboo écrit:
if (-e patchdiag.xref) {
system ("rm -f patchdiag.xref") ;
print ("nAncien versionne supprimee ... veuillez patienter
...nn") ;
}
system ("$chemin_vers_wget $ou_est_autopatch") ;
system ("mvQpatchDownload.pl?target=patchdiag.xref&method=HE
patchdiag.xref") ;


Heuu.. vous connaissez une autre commande que system("...") ?

Faitez donc un script shell.


Que c'est utile comme réponse !!!!


Avatar
Laurent Wacrenier
booboo écrit:
Que c'est utile comme réponse !!!!


Pour votre éducation choissez un langage (perl ou shell) et faites
soit
man sh
soit
man perl

Avatar
Paul GABORIT
"Laurent Wacrenier" <lwa@ teaser . fr> wrote in message
Heuu.. vous connaissez une autre commande que system("...") ?
Faitez donc un script shell.



À (at) Wed, 12 May 2004 17:19:47 +0200,
"booboo" écrivait (wrote):
Que c'est utile comme réponse !!!!


Traduction de la réponse : la commande 'system' fait appel au shell. Donc, si
vous faites tout par des appels à la fonction 'system', il vaut mieux écrire
directement un script shell. Vous rencontrerez les mêmes problèmes
d'échappement que ceux que vous rencontrez actuellement (mais cette fois sans
croire que c'est un problème lié à Perl ;-)

Sinon, pour faire du Perl, vous pouvez utiliser :

unlink
LWP
exec

et pour en savoir plus :

perldoc -f unlink
perldoc LWP
perldoc -f exec

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>


Avatar
sleep 30;
Permet d'attendre 30 secondes le temps que le fichier arrive.




Comment éviter que le program tente de renommer un fichier, avant qu'il
n'existe ?

merci.




Avatar
no
On Wed, 12 May 2004 17:08:18 +0200, booboo wrote:

Salut,
J'ai un petit script qui est censé mettre à jour des patches sur un
Solaris 8.

Voici les étapes..

1. il vérifie que patchdiag.xref n'existe pas. S'il existe, il le
supprime 2. il fait un wget sur le site de sunsolve, et repatrie le
patchdiag.xref. 3. il le renomme (puisqu'il ne se télécharge pas avec
le bon nom) en "patchdiag.xref".

Le problème c'est que le script a l'air d'avoir forké, car il me balance
une erreur que patchdiag.xref n'existe pas, autrement dit il essaie de le
renommer même avant de l'avoir téléchargé.

Voici le code..

###########
## recuperer le patchdiag.xref
###########

##########
## supprimer l'ancien
##########

if (-e patchdiag.xref) {
system ("rm -f patchdiag.xref") ;
print ("nAncien versionne supprimee ... veuillez patienter
...nn") ;
}
}
#########
## OK ... aller chercher le nouveau
#########

system ("$chemin_vers_wget $ou_est_autopatch") ; system
("mvQpatchDownload.pl?target=patchdiag.xref&method=HE patchdiag.xref") ;

Lorsque je lance, j'ai ...

% ./go.pl
--17:10:24--
http://sunsolve.sun.com/pub-cgi/patchDownload.pl?target=patchdiag.xref
=> `patchDownload.pl?target=patchdiag.xref'
Connecting to sunsolve.sun.com:80... sh:
mvpatchDownload.pl?target=patchdiag.xref&method=H: not found

Comment éviter que le program tente de renommer un fichier, avant qu'il
n'existe ?

merci.


Bon, pour mettre tout le monde d'accord je propose ça comme solution :

--8<--
#!/usr/bin/perl

exec <<EOSHELL

if [ -e patchdiag.xref ]; then
echo "> Suppression de patchdiag.xref";
rm patchdiag.xref;
fi;

echo "> Téléchargement de patchdiag.xref";
wget -Opatchdiag.xref http://sunsolve.sun.com/pub-cgi/patchDownload.pl?target=patchdiag.xref

EOSHELL
-->8--

Avatar
booboo
"@(none)" <""pierre"@(none)"> wrote in message
news:40a267f6$0$422$
sleep 30;
Permet d'attendre 30 secondes le temps que le fichier arrive.


J'y avais pensé, mais je voulais un truc plus "clean"... :-)