Le Monday 04 April 2011 01:07:09 Paul Marques Mota, vous avez écrit :
> Le 4 avril 2011 00:51, Alain Vaugham <al...@vaugham.com> a écrit :
> > Bonsoir la liste,
>
> Bonsoir
>
> > Je cherche à apprendre comment s'articulent les enchaînements de
> > plusieures commandes quand on les aligne sur une seule ligne à travers
> > des tubes et comment on passe les résultats d'un tube à l'autre.
>
> Tu devrait poster le script shell en question ici, ce sera plus simple
> pour te l'expliquer
>

La commande marche. Je ne comprend pas pourquoi.

=====================
$ grep domain /etc/services
$ cat /etc/services | grep domain
Ces deux formes différentes donnent un résultat identique.
=====================

Le man de grep dit que grep recherche le motif dans le fichier qui suit la 
commande. Donc je comprend bien cette structure car elle est conforme au 
man :
(commande + motif + fichier)
$ grep domain /etc/services
Que je lis cela donne : grep cherche le motif dans le fichier dont le nom est 
fourni juste **après** le motif.

Jusque là je pense que ça va. 
C'est la suite qui me perturbe.


Je ne comprend plus la syntaxe "cat /etc/services | grep domain" alors que je 
l'utilise tous les jours avec succès pour extraire toutes les lignes qui 
contiennent le mot "domain" du fichier /etc/services.
(concatène les fichiers et les affiche sur la sortie standard que le pipe 
fourni à l'entrée standard destinée à la commande grep pour extraire le 
motif) :
$ cat /etc/services | grep domain

Bien qu'elle fonctionne, cette syntaxe commence à me perturber car le man de 
grep dit que si le fichier est absent - et c'est strictement le cas ici - 
alors grep recherche le motif sur l'entrée standard. Seulement, l'entrée 
standard est décrite **avant** la commande grep et non pas **après** car elle 
vient de la sortie de cat.
Si j'applique strictement le manuel de grep alors la syntaxe aurait dû être :
(commande + motif + fichier ou entrée standard à fournir ici juste **après** 
le motif)
C'est à dire :
$ grep domain [quelque chose ici] cat /etc/services (pris comme entrée 
standard)
Si le [quelque chose ici] est un | ou un < cela n'affiche bien sûr pas la 
sélection souhaitée mais c'est conforme à la structure requise par le man de 
grep qui est : commande + motif à chercher dans "ce qui est **après**".
Dans ce cas, c'est le "ce qui est **après**" qui ne va pas.
Pour que ça marche il faut renier le man et le "ce qui doit être mis 
**après**", doit être mis en avant...

Donc j'ai un doute profond sur ma compréhension du passage de commandes quand 
je les aligne sur une seule ligne à travers des tubes ou des redirections et 
que je passe leur résultats vers la commande suivante.


En bref : je ne comprend plus rien depuis que j'ai lu les manuels de grep et 
de cat pour comprendre ce que j'appliquais les yeux fermés depuis plusieures 
années avec succès ;)



> > ... et je ne sais pas comment formuler cette demande à notre soi-disant
> > ami commun.
>
> Il faut taper "manuel bash", puis aller lire la section redirection de
>
> http://manpagesfr.free.fr/man/man1/bash.1.html
> http://www.gnu.org/software/bash/manual/bashref.html

Effectivement avec "manuel bash" cela cerne beaucoup mieux le genre de 
lectures que j'ai besoin en ce moment.

Merci Paul.



-- 
Alain Vaugham
Clef GPG : 0xD26D18BC
_________________________________
Linux mailing list
Linux@lists.parinux.org
http://lists.parinux.org/mailman/listinfo/linux

Répondre à