[Scripts Shell] Commandes find & echo - probleme d'affichage

Commandes find & echo - probleme d'affichage [Scripts Shell] - Shell/Batch - Programmation

Marsh Posté le 21-06-2004 à 11:57:46    

j'essaye d'executer le script suivant :
 

Citation :

#!/bin/bash
 
str="find . -name \"*.html\""
echo `$str`


 
ce script est cense me donner la liste des fichiers html presents dans tous mes sous-repertoires, mais il ne m'affiche rien. Pourtant quand je fais un echo "$str", il m'affiche bien : find . -name "*.html"
 
une idee?

Reply

Marsh Posté le 21-06-2004 à 11:57:46   

Reply

Marsh Posté le 21-06-2004 à 12:36:03    

echo ca l'affiche la string, ca ne l'exécute pas...


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 21-06-2004 à 13:15:22    

Faux, car quand je fais ca :
 

Citation :

#!/bin/bash
 
str="find . -name *.html"
echo `$str`


 
j'obtiens juste la liste des fichiers html dans le repertoire courant...

Reply

Marsh Posté le 21-06-2004 à 13:16:02    

javais pas vu les `` :D


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 21-06-2004 à 13:26:47    

ok ^^

Reply

Marsh Posté le 21-06-2004 à 16:03:12    

==> echo `eval $str`
 
find . -name \"*.html\"
ca fourni un retour imprévisible : le * est remplacé par ce que le shell trouve dans le repertoire courant ....
 
 
 

Reply

Marsh Posté le 22-06-2004 à 03:18:56    

Non, puisque le « * » est entre « " ».

Reply

Marsh Posté le 22-06-2004 à 11:03:20    

eval "*" est différent de eval \"*\"
c'est pareil pour find  

Reply

Marsh Posté le 23-06-2004 à 03:35:46    

Ben oui mais justement, il les avait les double quotes... Je comprend pas ce que tu veux dire à propos du « * ». Il a juste à ajouter le eval comme tu l'as dit, et ça roule.

Reply

Marsh Posté le 23-06-2004 à 09:24:47    

quand tu lances : find . -name \"*.html\"
le shell remplace * (il n'est pas neutralisé) par ce qu'il trouve dans le repertoire courant qui peut correspondre
 
ex 1 : si tu as un fichier qui s'appelle "ty.html"
commande : find . -name \"*.html\"
le shell interprete : find . -name "ty.html" et trouve  
./"ty.html"
ex 2 : si tu as 2 fichiers ("ty.html"    "ty2.html" ) qui  
correspondent au masque ca plantera  
find . -name \"*.html\"
le shell interprete : find . -name "ty.html" "ty2.html"
find: bad option "ty2.html"
d'ou ma remarque sur le comportement imprévisible de ce type de commande qui dépend du contenu du repertoire
 
 

Reply

Marsh Posté le 23-06-2004 à 09:24:47   

Reply

Marsh Posté le 25-06-2004 à 08:57:02    

en fait fallait juste faire :
 
str = `find . -name \"*.html\"`
 
merci de votre aide :)

Reply

Sujets relatifs:

Leave a Replay

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