Le 28/11/2012 17:47, Aurélien a écrit :
On Wed, Nov 28, 2012 at 3:48 PM, Jean Weisbuch <j...@plusquenet.net> wrote:
Une alternative en mksh qui doit aussi marcher sous ksh93 mais à vérifier ne
faisant appel qu'à egrep en commande externe pour récupérer le nombre de
cœurs physiques du CPU, en codant le script proprement on peux également se
débarrasser de l'utilisation de egrep :
Et printf, ou bien c'est une builtin ? En tout cas je concède que
c'est codé à l'arrache (déjà y'a des cat | :)). Mais vs bash, mksh ça
fait une dép en plus non ? Il y a un intérêt particulier que je
n'aurais pas vu ?
printf n'est "normallement" pas builtin dans mksh (en le compilant avec
les options par défaut) mais les versions packagées pour Debian ont le
printf builtin d'activé (vérifiable avec "whence printf" : renvoie le
chemin de printf si non builtin, sinon renvoie "printf") donc oui, ça
n'est effectivement pas "propre".
La doc de mksh à propos de printf
(https://www.mirbsd.org/htman/i386/man1/mksh.htm) :
Formatted output. Approximately the same as the printf(1), utili-
ty, except it uses the same Backslash expansion and I/O
code as
the rest of mksh. This is not normally part of mksh;
however, dis-
tributors may have added this as builtin as a speed
hack. Do not
use in new code.
Voici le bout de code qui remplace la ligne utilisant printf dans la
version initiale du script (sachant qu'en plus j'avais oublié de prendre
en compte le nombre de CPU dans le printf, ce qui est résolu ici) :
typeset -Uui16 -Z$((3+MAXCORE)) i; ((i = 1 << (c % MAXCORE)))
print "${i#16#}" > /proc/irq/${REPLY%:}/smp_affinity
Quant à la dépendance à mksh, le script dans sa version avec printf
devrait pouvoir aussi tourner sous ksh93 et autres variantes de ksh
(l'utilisation des paramètres avancés du typeset sur la "nouvelle
version" ne pas passera pas sous ksh93).
Pour ceux qui ne connaitraient pas mksh, c'est un shell léger et rapide
(souvent aussi rapide voire plus que (d)ash mais avec bien plus de
fonctionnalités et moins de bugs).
De plus c'est un shell disponible sur de très nombreux
systèmes/architectures (c'est d'ailleurs devenu le shell par défaut
d'Android) et qui est encore activement développé et n'ayant quasi
aucune dépendance (les dernières versions peuvent être compilées et
fonctionner sur Debian 0.x si mes souvenirs sont bons et une version
pour Windows existe également).
Il respecte mieux les normes POSIX que la plupart des shells et peut
être utilisé pour /bin/sh (avec /bin/mksh-static) et /bin/ksh (de rares
fonctions de ksh93 ne sont pas (encore) disponibles tel que les tableaux
associatifs).
Personnellement, je fais installer mksh automatiquement sur toutes mes
install (en version squeeze-backports sous Squeeze, la 40.4+ étant plus
véloce et offrant quelques possibilités en plus par rapport à la 39.3),
sachant que le mainteneur des packages Debian et Ubuntu n'est autre que
le développeur principal du shell (qui est facilement "accessible" sur
IRC et très sympathique).
_______________________________________________
Liste de diffusion du FRsAG
http://www.frsag.org/