Lo scopo di questa domanda è rispondere a una curiosità, non risolvere un particolare problema di elaborazione. La domanda è: perché le utility obbligatorie POSIX non sono comunemente integrate nelle implementazioni della shell?
Ad esempio, ho uno script che sostanzialmente legge alcuni piccoli file di testo e verifica che siano formattati correttamente, ma ci vogliono 27 secondi per essere eseguiti, sulla mia macchina, a causa di una notevole quantità di manipolazione delle stringhe. Questa manipolazione di stringhe crea migliaia di nuovi processi chiamando varie utility, quindi la lentezza. Sono abbastanza sicuro che se alcuni dei programmi di utilità sono stati costruiti in, vale a dire grep
, sed
, cut
, tr
, e expr
, quindi lo script verrebbe eseguito in un secondo o meno (in base alla mia esperienza in C).
Sembra che ci sarebbero molte situazioni in cui la creazione di questi programmi di utilità farebbe la differenza tra il fatto che una soluzione nello script di shell abbia prestazioni accettabili.
Ovviamente, c'è una ragione per cui è stato scelto di non integrare queste utilità. Forse avere una versione di un'utilità a livello di sistema evita di avere più versioni disuguali di tale utilità utilizzate da varie shell. Non riesco davvero a pensare a molte altre ragioni per mantenere il sovraccarico di creare così tanti nuovi processi, e POSIX definisce abbastanza sulle utilità che non sembra un problema avere implementazioni diverse, purché siano POSIX ciascuna conforme. Almeno non è un grosso problema quanto l'inefficienza di avere così tanti processi.
printf
, ecc.) Sono stati incorporati nelle shell quando sono stati ritenuti abbastanza utili.
awk
è un programma di utilità obbligatoria in POSIX, e particolarmente adatto (che è, molto veloce) per implementare script che altrimenti potrebbero implementare utilizzando sed
, cut
, tr
, grep
, e expr
in uno script di shell.