O objetivo desta pergunta é responder a uma curiosidade, não resolver um problema de computação específico. A pergunta é: Por que os utilitários obrigatórios do POSIX não costumam ser incorporados às implementações de shell?
Por exemplo, eu tenho um script que basicamente lê alguns arquivos de texto pequenos e verifica se eles estão formatados corretamente, mas leva 27 segundos para executar, na minha máquina, devido a uma quantidade significativa de manipulação de strings. Essa manipulação de strings cria milhares de novos processos chamando vários utilitários, daí a lentidão. Estou bastante confiante de que se algumas das utilidades foram construídos em, ou seja grep
, sed
, cut
, tr
, e expr
, em seguida, o script seria executado em um segundo ou menos (com base na minha experiência em C).
Parece que haveria muitas situações em que a criação desses utilitários faria a diferença entre uma solução no shell script ter ou não um desempenho aceitável.
Obviamente, há uma razão pela qual ele foi escolhido para não incorporar esses utilitários. Talvez ter uma versão de um utilitário no nível do sistema evite que várias versões desiguais desse utilitário sejam usadas por vários shells. Realmente não consigo pensar em muitas outras razões para manter a sobrecarga de criação de tantos processos novos, e o POSIX define o suficiente sobre os utilitários, para que não pareça um problema ter implementações diferentes, desde que cada POSIX compatível. Um problema pelo menos não tão grande quanto a ineficiência de ter tantos processos.
printf
etc.) foram incorporados aos shells quando foram considerados úteis o suficiente.
awk
é um utilitário obrigatório em POSIX, e especialmente adequado (isto é, muito rápido) para implementar scripts que você poderia implementar usando sed
, cut
, tr
, grep
, e expr
em um shell script.