El propósito de esta pregunta es responder a una curiosidad, no resolver un problema informático en particular. La pregunta es: ¿por qué las utilidades obligatorias POSIX no suelen integrarse en las implementaciones de shell?
Por ejemplo, tengo un script que básicamente lee algunos archivos de texto pequeños y comprueba que estén formateados correctamente, pero tarda 27 segundos en ejecutarse en mi máquina, debido a una cantidad significativa de manipulación de cadenas. Esta manipulación de cadenas crea miles de nuevos procesos al llamar a varias utilidades, de ahí la lentitud. Estoy bastante seguro de que si algunos de los servicios públicos fueron construidos en, a saber grep
, sed
, cut
, tr
, y expr
, a continuación, la secuencia de comandos se ejecutaría en un segundo o menos (basado en mi experiencia en C).
Parece que habría muchas situaciones en las que construir estas utilidades marcaría la diferencia entre si una solución en el script de shell tiene un rendimiento aceptable.
Obviamente, hay una razón por la que se eligió no hacer estas utilidades integradas. Quizás tener una versión de una utilidad a nivel de sistema evita que varias shells utilicen varias versiones desiguales de esa utilidad. Realmente no puedo pensar en muchas otras razones para mantener la sobrecarga de crear tantos procesos nuevos, y POSIX define lo suficiente sobre las utilidades para que no parezca un gran problema tener diferentes implementaciones, siempre que sean POSIX obediente. Al menos no es un problema tan grande como la ineficiencia de tener tantos procesos.
printf
, etc.) se han incorporado a los shells cuando se consideraron lo suficientemente útiles.
awk
es una utilidad obligatoria en POSIX, y especialmente adecuado (es decir, muy rápido) para implementar scripts que de otro modo podrían implementar usando sed
, cut
, tr
, grep
, y expr
en un script de shell.