find et echo [Shell] - Shell/Batch - Programmation
Marsh Posté le 05-10-2005 à 22:29:01
bah en faite, je veux passer tout le contenu de la variable $j a find.
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)
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
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` |
ou
cat fichier | find |
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 :
|
Il n'y a pas de raison que cela ne fonctionne pas. Que tu fasses
j=`cat fichier` |
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à : |
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 :
|
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 |
Si on ne met pas d'accolades, le shell ira chercher la variable "$prixF" et n'affichera rien
olivthill a écrit :
|
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
Marsh Posté le 06-10-2005 à 16:43:26
Sve@r a écrit : Essaye donc
|
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.
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 :
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 .