Re: [ssfr] Re: [SSFR] Partage de fonctions ...

[ Thread Index | Date Index | More debianworld.org/shellscript-fr Archives ]


On Wed, Apr 09, 2008 at 01:01:02PM -0400, Stephane Billiart wrote:
> Ma priorite est la compatibilite, la plupart des fonctions que j'utilise
> marche sous ksh, sh, bash et meme ash, le shell de busybox.

"It is easier to port a shell than a shell script."
   -- Larry Wall --

on tombe vite dans les specificites de chaque systeme. ex: un truc aussi
simple que les \t ne sont pas reconnus dans le sed de busybox (ou alors
j'ai manqué une étape en tentant printf "x\tx\n" | sed "s/\t/x/").
condamnera tu le \t pour autant ? c'est la une grande perte! 

perso, je ne teste que pour les environements que j'utilise. il est rare
que j'ai des fonctions qui me soient vraiment nécessaires partout.

quand je veux qqchose de portable, je passe a perl! (dispo meme sur mon
openwrt).

> Personnellement, je n'ai encore jamais vu zsh installe dans un
> environnement de production et jusque recemment les GNU utils ou Perl
> etaient rares, j'ai donc appris a faire sans, au prix de quelques pipes
> et fonctions plus ou moins simples.

et au prix de bugs tordus ? 

pps() { ps -Af | grep -w $LOGNAME | grep -v grep; }
et si il y a un ps -u$LOGNAME en meme temps sur le systeme? t'es marron!
le filtre de ps avec grep, j'ai donné! pas assez fiable! 

mais c'est vrai que sur busybox, par exemple, je n'ai pas de bonne idée.
celle qui me vient serait de virer les premiers 14 caracteres (ca a
l'air d'etre ca tout le temps ... a verifier dans les sources de leur ps)
pour etre sur de pouvoir chercher la premiere commande. bref... on passe
a awk/c/perl.

> > > lls() {
> > >     ls -ogrA --time-style="+" $* | awk -v min=${min:-4} '(NF>3)&&/^[^d]/{s=$3/1024;$1="";$2="";$3=""; if (s>min) printf "%12.2f\t%s\n", s, $0}' | sort -n
> > 
> > c'est typiquement le genre de ligne que je ne m'amuse meme plus a lire! 
> > pourquoi faut-il toujours rendre nos scripts shell illisibles?
> c'est pas tres lisible mais c'est une fonction tres pratique.

Je n'ai pas dis que ca n'etait pas pratique, j'ai dis que ca n'etait pas
lisible. Avec a peine plus d'effort, tu rends les choses beaucoup plus
accessibles:

lls() {
    ls -ogrA --time-style="+" $* |
	awk -v min=${min:-4} '
	    NF > 3 && /^[^d]/ { 
		s=$3/1024;
		$1="";
		$2="";
		$3="";
		if (s>min)
		    printf "%12.2f\t%s\n", s, $0;
	    }
	' |
	sort -n
} 

ensuite, ton ls ne passe ni sous busybox ni sous bsd. alors, la
compatibilite? 

> > tu peux expliquer ?
> je n'utilise pas wcmd directement mais via wll, wfile, wm, wvi qui me
> permettent de executer des commandes directement sur les fichiers du

ok ... merci 

marc

ps: je n'ai pas collé des "je pense que" ou des "peut-etre" partout dans
    mon message et on peut croire mon ton catégorique. Il n'en est rien:
    je partage simplement mon avis avec vous (sauf pour l'histoire de
    la lisibilité: elle doit etre une regle en shell autant que dans les
    autres langages).

-- 
Marc Chantreux
BibLibre, expert en logiciels libres pour l'info-doc
http://biblibre.com

---


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/