Le but de cette question est de répondre à une curiosité et non de résoudre un problème informatique particulier. La question qui se pose est la suivante: pourquoi les utilitaires POSIX obligatoires ne sont-ils généralement pas intégrés aux implémentations de shell?
Par exemple, j’ai un script qui lit en principe quelques petits fichiers texte et vérifie qu’ils sont correctement formatés, mais il faut 27 secondes pour s’exécuter, sur ma machine, en raison d’un nombre considérable de manipulations de chaînes. Cette manipulation de chaîne crée des milliers de nouveaux processus en appelant divers utilitaires, d’où la lenteur. Je suis assez confiant que si certains des services publics ont été intégrés, à savoir grep
, sed
, cut
, tr
et expr
, le script courrait dans une seconde ou moins ( d' après mon expérience en C).
Il semble que dans de nombreux cas, la construction de ces utilitaires puisse faire la différence entre une solution dans un script shell et des performances acceptables.
De toute évidence, il y a une raison pour laquelle il a été choisi de ne pas intégrer ces utilitaires. Peut-être qu'avoir une version d'un utilitaire au niveau du système évite que plusieurs versions inégales de cet utilitaire soient utilisées par différents shells. Je ne peux vraiment pas penser à de nombreuses autres raisons de garder la surcharge de créer autant de nouveaux processus, et POSIX définit suffisamment les utilitaires pour qu'il ne semble pas être un problème d'avoir différentes implémentations, tant qu'ils sont tous POSIX conforme. Du moins pas un problème aussi important que l'inefficacité d'avoir autant de processus.
printf
, etc.) ont été incorporés dans des coquilles lorsqu'elles ont été jugées suffisamment utiles.
awk
est un utilitaire obligatoire POSIX, et convient particulièrement bien (qui est, très rapide) pour mettre en œuvre des scripts que vous pourriez mettre en œuvre en utilisant autrement sed
, cut
, tr
, grep
et expr
dans un script shell.