Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3280 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1006666
xav_dev
Posté le 31-01-2008 à 09:46:53  profilanswer
 

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.

mood
Publicité
Posté le 31-01-2008 à 09:46:53  profilanswer
 

n°1007159
matafan
Posté le 01-02-2008 à 13:17:10  profilanswer
 

Enlève le "-c".

n°1008066
xav_dev
Posté le 04-02-2008 à 10:38:17  profilanswer
 

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 ??

n°1008802
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 06-02-2008 à 12:22:53  profilanswer
 

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.
n°1026436
scykhan
Posté le 27-03-2008 à 23:41:26  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 

Sujets relatifs
Unix - commande ATCommande df longue
ajouter un mot en début de ligne par rapport à la valeur cherchée[Gentoo] Demarrer l'install en ligne de commande
Exécution sed sur gros fichiercygwin pour utilisateur sans privilège
Besoin d'aide sur la commande find -execCommande SED
Problème avec la commande cat 
Plus de sujets relatifs à : [Cygwin] Pb d'execution en ligne de commande.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR