Salut,
J'ai un script qui gère mal les arguments dans @ARGV, car il sépare en plusieurs arguments lorsqu'il y a un espace dans un argument, alors que ce dernier est pourtant mis entre ""
quelqu'un saurait-il comment régler ce léger problème ?
![]()
Salut,
J'ai un script qui gère mal les arguments dans @ARGV, car il sépare en plusieurs arguments lorsqu'il y a un espace dans un argument, alors que ce dernier est pourtant mis entre ""
quelqu'un saurait-il comment régler ce léger problème ?
![]()
La réponse dépend du script. C'est le shell qui se charge de mettre les bons arguments dans @ARGV, donc tu ne peux rien faire si le dysfonctionnement est du côté du shell (ou plutôt du côté de la personne qui a mal rédigé les arguments du script). Cependant tu sembles dire que le script lui-même redécoupe les arguments qui lui sont donnés ? Dans ce cas il suffit de modifier le script pour qu'il ne fasse plus cela. A moins qu'il y ait une réelle raison pour ce comportement ?
--
Jedaï
Sinon, comment récupères-tu les données rangées dans @ARGV ?
Peut-on voir un bout de ton code ?
je récupère les arguments contenus dans @ARGV avec
car le nombre d'arguments n'est pas connu à l'avance...
Code : Sélectionner tout - Visualiser dans une fenêtre à part my $var = shift @ARGV;
pour ce qui est de l'appel du script via le shell, je lance :
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ./mon_script.pl "[ejfdjhgdf]courant d'air" courant_d-air
Dans ce cas le problème n'est pas dans le parsing des arguments, mais plutôt dans leur utilisation... Un exemple courant :
Si tu appelles ce script avec comme paramètre "hello world", $var contiendra hello world (sans les guillemets), d'où plantage quand tu utilises system avec une commande qui n'attend qu'un seul argument...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 my $var = shift; system "command $var";
La solution dans ce cas est :
(D'une manière générale, il vaut toujours mieux utiliser la version à plusieurs arguments de system() ou exec(), sauf si on a explicitement besoin que la ligne de commande soit interprétée par un shell)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 my $var = shift; system 'command', $var;
Evidemment il y a d'autres endroits où cela peut poser problème, sans ton script, nous ne pouvons pas t'en dire plus.
--
Jedaï
non je n'utilise pas system ensuite... je fais juste un echo pour le moment
en gros, c'est un script pour renommer des fichiers...
donc je lis le premier nom de fichier, le nouveau nom, et j'utilise rename... avec tous les tests qui vont bien.
or a cause de l'espace, ça passe pas![]()
Partager