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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Shell] find et echo

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Shell] find et echo

n°1216043
fripouille
Posté le 05-10-2005 à 22:16:57  profilanswer
 

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] .

mood
Publicité
Posté le 05-10-2005 à 22:16:57  profilanswer
 

n°1216048
Elmoricq
Modérateur
Posté le 05-10-2005 à 22:22:39  profilanswer
 

Et ça ne marche pas, ça :

find $j -name "client"


 
:??:

n°1216054
fripouille
Posté le 05-10-2005 à 22:29:01  profilanswer
 

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

n°1216063
Elmoricq
Modérateur
Posté le 05-10-2005 à 22:33:57  profilanswer
 

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)

n°1216068
fripouille
Posté le 05-10-2005 à 22:39:46  profilanswer
 

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
n°1216102
fripouille
Posté le 06-10-2005 à 00:21:25  profilanswer
 

:bounce:

n°1216117
olivthill
Posté le 06-10-2005 à 07:38:57  profilanswer
 

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
n°1216396
Sve@r
Posté le 06-10-2005 à 11:46:27  profilanswer
 

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
 
 
 

n°1216814
Sve@r
Posté le 06-10-2005 à 16:43:26  profilanswer
 

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
n°1217209
matafan
Posté le 07-10-2005 à 04:55:01  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Shell] find et echo

 

Sujets relatifs
Failed to find method for hashDes lignes apparaisent alors que je n'ai pas fais d'echo
Equivalent script shell sous WindowsEcho + div bgcolor ??
Plantage de script shell[Shell] Comment Faire 1 Tableau Avec Des Colonnes
[VBA] Problème avec la fonction shell[Shell] Archives multiples avec TAR
Insérer un slash dans un echo[Scripts Shell] Commandes find & echo - probleme d'affichage
Plus de sujets relatifs à : [Shell] find et echo


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