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 :
- j=`cat fichier`
- 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
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
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