UUOC ?

Le
Olivier Miakinen
Sur http://fr.wikipedia.org/wiki/UUOC#Cat_et_UUOC on voit l'exemple
typique d'« useless use of cat », à savoir « cat file | commande ».
Bien évidemment, « cat | commande » ou « commande | cat » serait
encore plus inutile. Mais qualifieriez-vous l'exemple suivant d'UUOC ?

On suppose que commande1 génère un code HTML tel que suit :
-
<html>

<body>

<p>
Vous pouvez faire du <a href='machin.html'>machin</a>.
</p>

<!-- MACHINTRUC
<p>
Vous pouvez faire du <a href='machintruc.html'>machin truc</a>.
</p>
MACHINTRUC -->

<!-- MACHINCHOSE
<p>
Vous pouvez faire du <a href='machinchose.html'>machin
chose</a>.
</p>
MACHINCHOSE -->


</body>
</html>
-

On suppose que commande2 fait quelque chose à partir de ce code HTML,
peu importe quoi. Enfin, on suppose que la commande revelemachin
retourne 0, 1 ou 2 selon que l'on doit laisser le code tel quel, ou
décommenter MACHINTRUC, ou encore décommenter MACHINCHOSE.

On a alors le script suivant :

-
case revelemachin in
1) FILTRE="grep -v MACHINTRUC" ;;
2) FILTRE="grep -v MACHINCHOSE" ;;
*) FILTREÊt ;;
esac

commande1 -parametres1 | $FILTRE | commande2
commande1 -parametres2 | $FILTRE | commande2

commande1 -parametresN | $FILTRE | commande2

-

Alors, UUOC ou pas UUOC ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #17588361
Bonjour,

Le 20/10/2008 15:38, j'écrivais :
[ ma question, brute de fonderie ]



Désolé, tout à la rédaction de ma question j'ai oublié les salutations
d'usage. Merci de ne pas vous en formaliser !
Stephane CHAZELAS
Le #17588351
2008-10-20, 15:38(+02), Olivier Miakinen:
[...]
case revelemachin in
1) FILTRE="grep -v MACHINTRUC" ;;
2) FILTRE="grep -v MACHINCHOSE" ;;
*) FILTREÊt ;;
esac

commande1 -parametres1 | $FILTRE | commande2
commande1 -parametres2 | $FILTRE | commande2
...
commande1 -parametresN | $FILTRE | commande2

-------------------------------------------------------------------------

Alors, UUOC ou pas UUOC ?



Obviously not.

Sauf que tu aurais pu l'ecrire:

case revelemachin in
1) FILTRE="|grep -v MACHINTRUC" ;;
2) FILTRE="|grep -v MACHINCHOSE" ;;
*) FILTRE= ;;
esac

eval "commande1 -parametres1 $FILTRE | commande2"
eval "commande1 -parametres2 $FILTRE | commande2"
...
eval "commande1 -parametresN $FILTRE | commande2"

Mais je trouve ta version plus propre et facile a lire, meme si
ca veut dire utiliser une commande inutile.

--
Stéphane
Olivier Miakinen
Le #17588461
Le 20/10/2008 15:42, Stephane CHAZELAS a écrit :

Alors, UUOC ou pas UUOC ?



Obviously not.



Merci de ta réponse.

Sauf que tu aurais pu l'ecrire:

case revelemachin in
1) FILTRE="|grep -v MACHINTRUC" ;;
2) FILTRE="|grep -v MACHINCHOSE" ;;
*) FILTRE= ;;
esac

eval "commande1 -parametres1 $FILTRE | commande2"
eval "commande1 -parametres2 $FILTRE | commande2"
...
eval "commande1 -parametresN $FILTRE | commande2"

Mais je trouve ta version plus propre et facile a lire, meme si
ca veut dire utiliser une commande inutile.



Ah oui, je n'avais pas pensé à eval, que je n'utilise jamais. Avec
eval je trouve trop facile de faire un code qui semble correct mais
qui présente un trou de sécurité. Plus précisément, je trouve trop
fatigant de devoir penser à chaque fois à tous les cas défavorables.

Quoi qu'il en soit, je vais donc laisser cette commande parfois
inutile, pour la lisibilité.
Che Averell
Le #17588451
'lu Olivier,

Olivier Miakinen <snip>
Alors, UUOC ou pas UUOC ?



La bonne réponse est « on s'en fout ». En fait, soit on fait un UUOC
dans un script pas particulièrement critique, et dans ce cas, la
pénalité de forker un process qui ne sert à rien n'est pas
pénalisante. Ou alors on est dans un cas où la pénalité de forker est
pénalisante, et là, plutôt que de s'emmerder avec un script shell à
réécrire, on pourrait plutôt se poser la question de réécrire le
script en question dans un langage un poil plus évolué qui offre de
meilleures perfs (et entre Perl, Ruby, Python, ou autres, il y en a
pléthore).

Dit autrement, il est bon de connaître le principe du UUOC, de savoir
que souvent il n'est pas nécessaire, qu'il vaut mieux faire autrement,
mais c'est pas ça qui va mettre ta machine à genoux. À part ça, c'est
juste un truc d'intégristes.

mes deux centimes.
Chris
Le #17589041
Che Averell a écrit :
>...
La bonne réponse est « on s'en fout ». En fait, soit on fait un UUOC
dans un script pas particulièrement critique, et dans ce cas, la


>...
juste un truc d'intégristes.



>...
Je suis un peu d'accord avec le Che Averell
Le mieux est bien souvent l'ennemi du bien, et je préfère un script
lent et lisible plutôt qu'optimisé et incompréhensible

Enfin si je dois le maintenir ...

D'ailleurs c'est pour cette raison que je suis passé du

Epoque "age de pierre"
==> shell + awk + sed + grep

Epoque "Age de Bronze"
==> Shell + perl

Epoque "Industrielle"
==> shell + python

python est quand même très bien enfin IMHO

A+
chris
Olivier Miakinen
Le #17589031
Le 20/10/2008 16:01, Che Averell a écrit :

Alors, UUOC ou pas UUOC ?



La bonne réponse est « on s'en fout ». [...]

[ coupe de plein de choses très justes ]

[...] À part ça, c'est juste un truc d'intégristes.



C'est pas faux...
Che Averell
Le #17589181
Chris
'lu

Juste pour le troll :

Epoque "Age de Bronze"
==> Shell + perl
Epoque "Industrielle"
==> shell + python



Pour moi, c'est plutôt une régression.


;-)
Che Averell
Le #17589171
Olivier Miakinen
[...] À part ça, c'est juste un truc d'intégristes.


C'est pas faux...



Tu sais pas ce que ça veut dire « intégriste » ?


(ref: http://www.youtube.com/watch?v=UlNQMLl-xjU)
Stephane CHAZELAS
Le #17589161
2008-10-20, 17:16(+02), Chris:
Che Averell a écrit :
>...
La bonne réponse est « on s'en fout ». En fait, soit on fait un UUOC
dans un script pas particulièrement critique, et dans ce cas, la


>...
juste un truc d'intégristes.



>...
Je suis un peu d'accord avec le Che Averell
Le mieux est bien souvent l'ennemi du bien, et je préfère un script
lent et lisible plutôt qu'optimisé et incompréhensible



Oui, sauf que "cat" est la commande pour concatener des
fichiers, et que concatener un seul fichier peut paraitre moins
lisible.

cat fichier | cat - | cat | paste | cut -b1- | grep '^' |
sed b | awk 1 | comm -3 - /dev/null | dd 2> /dev/null |
tee /dev/null | tail -n +1 | join | join -a1 - /dev/null |
more | cmd

(pourquoi se limiter a cat)

est pour moi moins lisible que

cmd < fichier

ou

< fichier cmd

Enfin si je dois le maintenir ...

D'ailleurs c'est pour cette raison que je suis passé du

Epoque "age de pierre"
==> shell + awk + sed + grep



note que awk est un surensemble de sed et grep.

Epoque "Age de Bronze"
==> Shell + perl

Epoque "Industrielle"
==> shell + python

python est quand même très bien enfin IMHO



Question de gout, et je suis sur que python a deja ete supplanté
par une demi douzaines de nouveaux languages encore plus hypes.

Cela dit, je suis plutot d'accord.

--
Stéphane
Olivier Miakinen
Le #17593741
Le 20/10/2008 17:26, Che Averell a écrit :

[...] À part ça, c'est juste un truc d'intégristes.


C'est pas faux...



Tu sais pas ce que ça veut dire « intégriste » ?
(ref: http://www.youtube.com/watch?v=UlNQMLl-xjU)



Excellent !
Publicité
Poster une réponse
Anonyme