Bonjour à tous
Comment récupérer la ligne qui est à l'origine du lancement du script sans passer par ARGV ni Getopt ?
J'ai essayé le diamant sans succès.
Merci d'avance
Version imprimable
Bonjour à tous
Comment récupérer la ligne qui est à l'origine du lancement du script sans passer par ARGV ni Getopt ?
J'ai essayé le diamant sans succès.
Merci d'avance
La mauvaise nouvelle, c'est qu'à ma connaissance, ça n'est pas possible.
Mais la bonne nouvelle, c'est qu'autant que je sache, ça ne sert à rien de toute façon.
EDIT: j'ai répondu un peu vite. Bien sûr que ça peut servir, mais après vérification, pour avoir la commande appelée, il faut regarder dans $0, et pour les arguments il faut bel et bien en passer par @ARGV. Je voulais dire que ça ne sert à rien de chercher ailleurs que dans ce qui est déjà proposé. J'avais mal compris la question.
Je me disais que perl doit bien récupérer $0 et @ARGV quelque part et qu'il aurait pu exister un module qui puisse le faire :)
C'est vraiment bizarre, j'ai fait pas mal de recherches infructueuses pour le moment.
Dans mes commandes de lancement, j'ai des valeurs entre guillemets et d'autres sans et je peux aussi avoir des options : une vrai galère de reconstituer la commande de lancement avec $0 et @ARGV !
je ne pense pas que tu trouvera autre chose, c'est la façon standard pour perl de présenter les arguments qui ont été utilisé pour lancer ton script.
Autrement tu peux jouer avec getopt pour avoir des fonctionnalité de parsing d'arguments avancés.
http://perldoc.perl.org/Getopt/Long.html
Tu souhaites reconstituer la commande perl pour quel usage ? Si c'est simplement pour l'afficher, tu n'es peut-être pas obligé de replacer les guillemets comme elles étaient.
Si c'est pour le relancer (par la commande exec par exemple), dans ce cas, la ré-écriture dépendre du shell par défaut que perl utilise (qui peut éventuellement être différent du shell avec lequel tu as initialement lancé le script).
Merci pour ces réponses.
C'est en effet pour la ré-exécuter.
Comment connaître le shell utilisé par perl ?
Je ne savais pas que perl lui-même utilisait un shell ...
Je me suis contenté d'exploiter @ARGV et $0.
Je marque le sujet comme résolue ou pas ?
Perl utilise un shell à chaque fois que tu appelles system ou l'opérateur qx//;
Je ne sais plus où est défini le shell par défaut utilisé dans ce cas (et probablement dans le cas de exec).
Personnellement, je l'ai utilisé avec la fonction exec pour redémarrer un démon après qu'il est détecté lui-même que son source ou son fichier de donnée initiales ait été modifié.Citation:
Par curiosité, pourquoi souhaites-tu que ton script se ré-exécute lui-même ?
:lol: mauvaise interprétration de ma part, je n'ai pas vu qu'on parlait du contexte de la commande dans le script, je pensais qu'on parlait du lancement par l'utilisateur ;)
Et si un utilisateur malveillant modifie le source ? Le daemon se relance avec les modifs malicieuses sans autre forme de procès ? Ca me semble plutôt dangereux comme façon de faire.Citation:
Personnellement, je l'ai utilisé avec la fonction exec pour redémarrer un démon après qu'il est détecté lui-même que son source ou son fichier de donnée initiales ait été modifié.
@+
Mr6
Alors en effet, il ne semble pas d'autres moyens que $0 et @ARGV plus ou moins donnés par le shell qui est responsable, au passage du retrait des guillemets dont il se sert. Pour les conserver, il faut les échapper.
La raison pour laquelle, je voulais relancer le script plus tard est qu'il fait intervenir une variable aléatoire.