[Shell] find et echo

find et echo [Shell] - Shell/Batch - Programmation

Marsh Posté le 05-10-2005 à 22:16:57    

Bonjour a tous, j'essaille de faire qqch mais en vain, alors je me tourne vers vous :
 
$cat fichier
/home/fripouille -name "client"
 
ce que je voudrais faire c'est :  find /home/fripouille -name "client"  
mais de la maniere suivante :

Code :
  1. j=`cat fichier`
  2. find `echo "$j"`


Le probleme c'est que find n'interprete pas ma variable comme je le voudrais
 
Auriez vous une petite idee, une piste, qqch ... ca m'aiderais beaucoup :) pke la je  [:arhendal] .

Reply

Marsh Posté le 05-10-2005 à 22:16:57   

Reply

Marsh Posté le 05-10-2005 à 22:22:39    

Et ça ne marche pas, ça :

find $j -name "client"


 
:??:

Reply

Marsh Posté le 05-10-2005 à 22:29:01    

bah en faite, je veux passer tout le contenu de la variable $j a find.

Reply

Marsh Posté le 05-10-2005 à 22:33:57    

Ah, oui. Je n'avais pas vu.
 
J'ai pas de shell pour tester, mais à mon avis un truc dans ce goût là :
 
`find $j`
 
devrait fonctionner (en gros $j est interprété par le shell courant et un sous-shell va recevoir find + le contenu de $j directement)

Reply

Marsh Posté le 05-10-2005 à 22:39:46    

Nan, ca marche pas, il me sort un no such file or directory qd je fais ca :s
d'ailleurs, meme `find "$j"` ne marche pas


Message édité par fripouille le 05-10-2005 à 22:41:05
Reply

Marsh Posté le 06-10-2005 à 00:21:25    

:bounce:

Reply

Marsh Posté le 06-10-2005 à 07:38:57    

Pour faire un find pour trouver un fichier dont le chemin et le nom du fichier à trouvé sont dans un fichier, la solution est peut-être :

j=`cat fichier`  
find ${j}

ou

cat fichier | find

Message cité 1 fois
Message édité par olivthill le 06-10-2005 à 07:52:07
Reply

Marsh Posté le 06-10-2005 à 11:46:27    

fripouille a écrit :

Bonjour a tous, j'essaille de faire qqch mais en vain, alors je me tourne vers vous :
 
$cat fichier
/home/fripouille -name "client"
 
ce que je voudrais faire c'est :  find /home/fripouille -name "client"  
mais de la maniere suivante :

Code :
  1. j=`cat fichier`
  2. find `echo "$j"`


Le probleme c'est que find n'interprete pas ma variable comme je le voudrais


Il n'y a pas de raison que cela ne fonctionne pas. Que tu fasses

j=`cat fichier`
find `echo "$j"`


ou bien

find `cat fichier`


Cela devrait fonctionner. Cependant, la commande "find" qu'on trouve dans les Unix classiques impose qu'on rajoute l'option "-print" pour qu'elle affiche ce qu'elle trouve à l'écran
Essaye donc

find `cat fichier` -print


 

Elmoricq a écrit :

J'ai pas de shell pour tester, mais à mon avis un truc dans ce goût là :
 
`find $j`
 
devrait fonctionner (en gros $j est interprété par le shell courant et un sous-shell va recevoir find + le contenu de $j directement)


Tu devrais quand-même apprendre le mécanisme de la backquotte. Elle a pour rôle de
1) exécuter un sous-shell
2) remplacer, dans le shell principal, la commande exécutée par ce que le sous-shell a affiché
 
Exemples
a=`date`    => stocke la date courante dans la variable "a"
b=`pwd`     => stocke le chemin dans la variable b
test `wc -c fic`-eq 10    => compte le nb de lignes de "fic" et replace ce nb de lignes dans la comparaison de "test" => vérfie si le nb de lignes de "fic" vaut 10
 
Exemple inutile mais qui fonctionne
`echo ls`     => exécute un sous-shell qui va afficher "ls", puis replace cet affichage à l'endroit de la backquotte  => cela va alors exécuter "ls" tout comme si on l'avait simplement demandé
 
Dans ta commande `find $j`, soit
1) la commande n'affiche rien et rien ne se passe
2) soit la commande affiche un truc et ce truc est traité comme si c'était une commande à exécuter (le premier mot d'une ligne de shell doit impérativement être une commande valide ou un commentaire)
 

olivthill a écrit :

Pour faire un find pour trouver un fichier dont le chemin et le nom du fichier à trouvé sont dans un fichier, la solution est peut-être :

j=`cat fichier`  
find ${j}



Ca c'est bien essayé... mais inutile. Les accolades autour d'une variable ne servent que quand on veut isoler une variable par rapport au texte qui l'entoure. Par exemple :

prix=10
echo "Ce vélo coûte ${prix}F"


Si on ne met pas d'accolades, le shell ira chercher la variable "$prixF" et n'affichera rien
 

olivthill a écrit :

cat fichier | find



Ca c'est franchement moyen. Ca remplace dans la commande "find" toutes les entrées clavier par le texte affiché par la commande "cat fichier". Or, find n'attend rien du clavier.
 
Un bon cours de shell complet et en français ici : http://fr.lang.free.fr/cours/Shell_v1.4.pdf
 
 
 

Reply

Marsh Posté le 06-10-2005 à 16:43:26    

Sve@r a écrit :

Essaye donc

find `cat fichier` -print



J'ai essayé la commande sur Linux. En effet, cela ne fonctionne pas
J'ai donc activé le débugging shell en tapant "set -x" pour que le shell me montre exactement ce qu'il va exécuter. Puis j'ai retapé la commande.
 
Voici la commande que j'ai tapé

find `cat fichier`


 
Voici ce que m'a montré le débugging :

Citation :

find /home/fripouille -name '"client"'


Je ne comprends pas d'où sortent ces guillemets simple mais évidemment ils mettent le why. Je pense que c'est le mécanisme de la backquotte qui les rajoute automatiquement. En effet, la backquotte a pour but de replacer dans le shell tout ce que la commande encadrée affiche. Or, pour pouvoir afficher des guillemets doubles, il faut les protéger avec des guillemets simple !!!
J'ai trouvé un pallliatif en enlevant les guillemets doubles autour du mot "client" dans le fichier. Voici alors ce que vois le shell :

Citation :

find /home/fripouille -name 'client'


Là, ça fonctionne.


Message édité par Sve@r le 06-10-2005 à 16:48:40
Reply

Marsh Posté le 07-10-2005 à 04:55:01    

Et puis `echo "$j"`, ça s'écrit plus simplement $j.

Reply

Sujets relatifs:

Leave a Replay

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