[Toulouse-pm] OSCON (3)
Michel Rodriguez
mrodrigu at ieee.org
Tue Jul 27 14:16:12 CDT 2004
Welcome to my bin
*MJD*
Quelques petits bouts pour commencer: "fork && exit;" pour mettre
le process en background. "exec $command; die "could not run
$command";" exec retourne uniquement si la commande ne marche pas.
Il présente les outils de son ~/bin, sur le même principe que
Damian l'an dernier a YAPC. J'aime bien ce genre de talk parce que
ça me donne des idées, et surtout ça m'incite à être fénéant,
vraiment fénéant, cad écrire mes propres outils.
Il nous prévient d'abord que le code qúil va présenter est tel
quel, brut de sa machine, y compris les fautes de frappe, le
traitement des options non-standard, et surtout le thème qui lui
est apparu en préparant le cours: "over-engineering", ses outils
sont souvent un peu trop compliqués, surtout avec des options dont
il ne se sert jamais.
Il nous présente d'abord un programme qui replace slocate. Il
construit juste une liste des fichiers sur sa machine (avec
"find"!) et ensuite utilise une couche au-dessus de "grep". Je
pense que je vais réutiliser ça, j'en ai marre de ne pas pouvoir
utiliser d'expressions régulieres avec "slocate". Du coup je tape
"slocate toto | grep 'toto$'" trop souvent.
Maintenant "pgrep" qui remplace grep. Il lui permet de remplacer
par example "find . -type f | xargs grep /foo/". Tiens, il utilise
"printf( "%2$s",...)", ou le %2$s sort le deuxième argument du
"printf" (le "printf" a toujours la même liste d'arguments et il
construit le format en fonction des options). Je peux faire le
barbot et montrer que je connais les options de "grep" mieux que
lui parce qúil a écrit "pgrep" il y a 2 ans alors que j'ai écrit
"xml_grep" l'an dernier ;--)
Maintenant "ticker": "it is an incredibly useless program that
takes up an enormous amount of cycles and I use it all the time":
il fait comme "tail -f" sauf qúil affiche la taille du fichier.
Pour quand on veut savoir si le (ou plusieurs) fichier grossit,
sans être interessé par son contenu. Le code sommence par "use
FileHandle;"... qui n'est jamais utilisé. Au cas ou certains ne
connaitraient pas, comment utiliser un module si il est installé,
sans mourrir s'il ne l'est pas:
if( eval( 'require Time::Hires') ) { import Time::Hires; }
Un autre truc que je savais pas: "print "\r";" revient au début de
la ligne sans changer de ligne (sous unix).
Il a quelques options rigolotes, qúil n'a jamais utilisées: le
nombre de pages (lignes/66) du fichier, le taux de
grossissement...
Bon, on passe a "ftail". Il utilise "supervise" pour les services
genre mail. "supervise" se charge de la rotation des logs, ce qui
fait que "tail -f" n'affiche plus le bon fichier (mais le vieux
log qui ne grossit plus). Donc "ftail" suit le fichier par nom. En
fait maintenant "tail --follow=name" fait ça.
Puis "f", qui remplace "awk '{print $7}'" (remplacé par "f 7"). Le
code fait 4 lignes (juste décrementer l'argument, un "split" et
voili!). En plus il peut faire "f -1" pour avoir la dernière
colonne. Wouah, je me rappelais plus de l'option "-a" qui met Perl
en mode "awk" (la ligne est "split"-ée et @F reçoit le résultat).
On passe a "psgrep", qui fait juste l'équivalent de "ps -ef |
grep", sauf que en plus ça laisse l'en-tête qui donne le nom des
colonnes. 5 lignes, tout bête mais ça fait gagner du temps.
"sw" lance un process dans une petite fenêtre ("sw" veut dire
small window). Au lieu de lancer les process en background il les
lance avec "sw" le plus souvent. Il découvre, à sa grande surrise
que le code est... ! ligne de shell!!
exec rxvt -fn 6x10 -e "$@" &
Tiens, il trouve un bug dans "attach", qui lui permet de créer
depuis la ligne de commande des mails avec des attachements.
Sa conclusion: ses programmes sont souvent assez mal codés, mais
en fait comme ils sont courts ça n'est pas très grave, ils
marchent assez bien et il s'en sert s'en arrêt.
More information about the Toulouse-pm
mailing list