[Cygwin] Pb d'execution en ligne de commande.

Pb d'execution en ligne de commande. [Cygwin] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 31-01-2008 à 09:46:53    

Bonjour a tous,
 
J'ai un problème d'execution d'un shell sur Cygwin, je m'explique :  
J'ai un script tous simple qui fait une recherche de fichier à l'aide de ma commande "find"
 
fichier test.sh :

Code :
  1. #!/bin/sh
  2. find "/cygdrive/e/rep_recherche" -name fichier.cfg


 
Il faut pouvoir ordonnancer ce script et pour ca je souhaite le lancer à partir d'une commande dos que voici :  
 
bash.exe -c 'test.sh'
 
Biensure sans oublier de mettre le fichier test.sh au format UNIX et de rajouter dans le path le répertoire bin de Cygwin et le répertoire dans lequel se trouve le script test.sh.
 
 
Mon problème est que :  
 - Ce script fonctionne tres bien lorsque que je l'execute à partir d'une console Cygwin
 - Il ne fonctionne pas lorsque je le lance en ligne de commande DOS. J'obtiens l'erreur suivante :
 

Code :
  1. C:\Documents and Settings\Administrateur>bash -c 'test.sh'
  2. Fichier introuvable - -NAME
  3. Fichier introuvable - FICHIER.CFG

 
 
Si quelqu'un à déjà rencontré le problème je suis preneur de la solution. Sinon je suis preneur de toute idée de contournement l'idée étant de recuperer une liste de fichiers avec leur chemin absolu pour pouvoir les traiter un par un.
 
Merci d'avance pour vos réponses
 
Xavier.

Reply

Marsh Posté le 31-01-2008 à 09:46:53   

Reply

Marsh Posté le 01-02-2008 à 13:17:10    

Enlève le "-c".

Reply

Marsh Posté le 04-02-2008 à 10:38:17    

Merci pout ton conseil mais malheureusement ca ne change rien. J'obtiens exactement le même résultat.
Par contre, j'ai continué à chercher et à faire des tests et il semble que le find s'execute dans le "contexte" MSDOS. C'est à dire que lorsque que lance la commande suivante :  

Code :
  1. C:\Documents and Settings\Administrateur>find "/cygdrive/e/rep_recherche" -name fichier.cfg


J'obtiens exactement le meme message d'erreur  :??:  
 
Quelqu'un peut il m'expliquer ce phenomène ??

Reply

Marsh Posté le 06-02-2008 à 12:22:53    

Dans un shell bash, si tu tapes :

bash -c 'test.sh'


Ton shell "fork" et il y a un nouveau processus fils avec [bash -c 'test.sh'] qui s'exécute.
Ce processus fils hérite de tous les attributs du père.
 
Si tu fais en DOS :

bash -c 'test.sh'


Tu n'as pas ce processus père, tu dois te débrouiller seul.
Donc la différence doit venir de là.
 
Si on regarde cygwin.bat qui lance cygwin, on voit :

bash --login -i


 
Je ne pense pas qu'être intéractif change quoi que ce soit, donc c'est peut-être l'aspect "login shell" qui te manque (cf man bash puis INVOCATION)  :??:  


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 27-03-2008 à 23:41:26    

Salut,
 

xav_dev a écrit :

Merci pout ton conseil mais malheureusement ca ne change rien. J'obtiens exactement le même résultat.
Par contre, j'ai continué à chercher et à faire des tests et il semble que le find s'execute dans le "contexte" MSDOS. C'est à dire que lorsque que lance la commande suivante :  

Code :
  1. C:\Documents and Settings\Administrateur>find "/cygdrive/e/rep_recherche" -name fichier.cfg


J'obtiens exactement le meme message d'erreur  :??:  
 
Quelqu'un peut il m'expliquer ce phenomène ??


Ton problème ne viendrait-il pas du fait que dans le contexte du bash (lancé depuis le dos) qui execute ton test.sh, la commande find qui est exécutée est en fait l'ignoble find.exe de dos/windows ?
J'ai essayé de reproduire ton pb en ajoutant dans le test.sh un "type find"

Code :
  1. #!/bin/sh
  2. type find
  3. find "/cygdrive/e/rep_recherche" -name fichier.cfg


Résultat :  

Code :
  1. find is /cygdrive/e/WINDOWS/system32/find
  2. FIND : commutateur non valide


ce n'est pas tout a fait le même message, mais néanmoins on voit bien que ce n'est pas le find cygwin qui est utilisé
du coup, le fix qui marche chez moi est simplement de faire :

Code :
  1. #!/bin/sh
  2. type find
  3. /usr/bin/find "/cygdrive/e/rep_recherche" -name fichier.cfg


La difference de comportement entre lancement depuis dos vs. cygwin est que dans l'env cygwin, le path /usr/bin doit se retrouver avant les paths vers le repertoire windows\system32, du coup tu tombes sur le bon find d'emblée.

Reply

Sujets relatifs:

Leave a Replay

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