ou m'éxécute-je ? pb simple de path

ou m'éxécute-je ? pb simple de path - Shell/Batch - Programmation

Marsh Posté le 03-06-2005 à 17:21:25    

salut,
c un repost, je c c pas bien mais vu que personne code en perl, et que le pb peut être résolu par une commande shell ...  
 
le pb est simple je veux connaître à l'éxécution de mon script perl et sans le passer en paramètre l'endroit ou il est éxécuté, sachant qu'un simple appel à pwd ne fait pas ce que je veux si le script est appelé comme suit :
perl /mnt/temp/messuperscriptsperl/monscript.pl param1 param2 etc ...
 
merci d'avance :)
 

Reply

Marsh Posté le 03-06-2005 à 17:21:25   

Reply

Marsh Posté le 03-06-2005 à 18:00:27    

La reponse est simple : ce n'est pas possible.

Reply

Marsh Posté le 03-06-2005 à 19:02:47    

L'endroit OU il est executé est toujours le meme puisque ton script ne bouge pas...
L'endroit D'OU il est executé, il suffirait de passer au script le "pwd"... Ca devrait s'arranger avec un alias.
A creuser mais je penses que c est faisable.

Reply

Marsh Posté le 06-06-2005 à 11:04:23    

merci pr vos réponses :) je v me démerder autrement.

Reply

Marsh Posté le 06-06-2005 à 11:19:48    

denzz a écrit :

c un repost, je c c pas bien mais vu que personne code en perl, et que le pb peut être résolu par une commande shell ...


 
Si, si, y a des gens qui codent en PERL.
 

denzz a écrit :

le pb est simple je veux connaître à l'éxécution de mon script perl et sans le passer en paramètre l'endroit ou il est éxécuté, sachant qu'un simple appel à pwd ne fait pas ce que je veux si le script est appelé comme suit :
perl /mnt/temp/messuperscriptsperl/monscript.pl param1 param2 etc ...


 
$ENV{PWD} est plus propre que d'appeler pwd directement.
 
Je ne comprends pas la question, tu veux savoir où se trouve le fichier ?
 
Si oui, il te suffit de lire le paramètre $0, qui contient la commande d'exécution.  
 
Si le premier caractère de $0 est un /, alors le chemin est absolu, et $0 te suffit.
Dans le cas contraire, le chemin est relatif, et il suffit de concatener $ENV{PWD} avec le contenu de $0 (et un / entre les deux).

Reply

Marsh Posté le 06-06-2005 à 19:48:44    

$PROGRAM_NAME
mais je crois que c'est pareil que $0

Reply

Marsh Posté le 06-06-2005 à 20:32:59    

Elmoricq a écrit :

Si le premier caractère de $0 est un /, alors le chemin est absolu, et $0 te suffit.
Dans le cas contraire, le chemin est relatif, et il suffit de concatener $ENV{PWD} avec le contenu de $0 (et un / entre les deux).


C'est touchant de naivete. Comment fais-tu dans le cas ou l'appli a change le repertoire courrant ? Il n'y a aucun moyen de faire ce qu'il veut dans le cas general.

Reply

Marsh Posté le 06-06-2005 à 22:42:13    

matafan a écrit :

C'est touchant de naivete. Comment fais-tu dans le cas ou l'appli a change le repertoire courrant ? Il n'y a aucun moyen de faire ce qu'il veut dans le cas general.


 
De quelle application tu parles ?
Relis donc le sujet initial ; on n'est pas dans un cas général, je ne sais pas où tu es allé lire ça :
 

Citation :

le pb est simple je veux connaître à l'éxécution de mon script perl et sans le passer en paramètre l'endroit ou il est éxécuté, sachant qu'un simple appel à pwd ne fait pas ce que je veux si le script est appelé comme suit :
perl /mnt/temp/messuperscriptsperl/monscript.pl param1 param2 etc ...


 
Ce qui est, j'espère que tu en conviendras, tout à fait possible.  
On pourra éventuellement compléter par un test plus complet avec prise en compte de la variable $ENV{PATH}.
 
Merci de pondérer tes réponses avant d'employer les insultes.


Message édité par Elmoricq le 06-06-2005 à 22:46:42
Reply

Marsh Posté le 10-06-2005 à 11:10:53    

merci les gars ;)  
et c pas la peine de se battre pour moi :D
par contre, $0 c pas la même chose que $ARGV[0] alors ??
faudrait que je revoie mes connaissances en perl je crois ^^
 
merci aux gens qui codent en perl d'être toujours là !!  
 

Reply

Marsh Posté le 10-06-2005 à 11:13:06    

Citation :

par contre, $0 c pas la même chose que $ARGV[0] alors ??


 
Je ne connais pas $ARGV[0].
 
Vu que je n'ai pas la science infuse, j'ai testé, ça me retourne ceci (warnings activés) :
 

Use of uninitialized value at test.pl line 5.


 
Je dirais donc que ça n'existe pas.

Reply

Marsh Posté le 10-06-2005 à 11:13:06   

Reply

Marsh Posté le 10-06-2005 à 11:25:06    

....
$ARGV[0] pour moi c le premier paramètre passé au script.
lorsque tu appelle ton script  
test.pl monpremierargument  
ca te renvoie tjrs rien ??  
tu me fais douter là, comment ca se fait que mes scripts perl font ce que je veux ??  :ouch:  :ouch:


Message édité par denzz le 10-06-2005 à 11:25:19
Reply

Marsh Posté le 10-06-2005 à 11:32:09    

Non.
 
En fait je viens de lire ma doc, et @ARGV ne stocke que les arguments effectifs, il ne contient apparemment pas la ligne de commande.
 
Exemple :

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. if (not defined ( @ARGV ))
  4. {
  5.     print "Aucun argument\n";
  6.     exit 0;
  7. }
  8. foreach my $i ( 0..$#ARGV )
  9. {
  10.     print "Argument $i : " . $ARGV[$i] . "\n";
  11. }


 
 
Retourne :
 

[user@machine ~/Work/tmp] perl test.pl arg1 arg2 arg3
Argument 0 : arg1
Argument 1 : arg2
Argument 2 : arg3
[user@machine ~/Work/tmp] perl test.pl  
Aucun argument
[user@machine  ~/Work/tmp]  


 
 
 
En revanche, $0 contient toujours le nom du programme tel qu'il a été démarré.


Message édité par Elmoricq le 10-06-2005 à 11:42:14
Reply

Marsh Posté le 23-06-2005 à 10:10:55    

oufff  
tu me rassures :)
bon, et bien je v essayer comme ca :)  
en fait le but est de connaître le path où est situé le script, donc $0 ne répond pas directement à mon problème, il faut que je teste si c'est un chemin complet ou pas...  
raaa la flemme de coder tout ca, ca marche comme c'est point barre :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed