Celem tego pytania jest odpowiedź na ciekawość, a nie rozwiązanie konkretnego problemu komputerowego. Pytanie brzmi: dlaczego obowiązkowe narzędzia POSIX nie są często wbudowane w implementacje powłoki?
Na przykład mam skrypt, który w zasadzie czyta kilka małych plików tekstowych i sprawdza, czy są one odpowiednio sformatowane, ale uruchomienie na moim komputerze zajmuje 27 sekund z powodu znacznej ilości operacji na łańcuchach. Ta manipulacja ciągiem powoduje tysiące nowych procesów poprzez wywoływanie różnych narzędzi, stąd powolność. Jestem całkiem pewny, że jeśli niektóre media zostały wbudowane, a mianowicie grep
, sed
, cut
, tr
, i expr
, a następnie skrypt zostanie uruchomiony w sekundę lub mniej (w oparciu o moje doświadczenia w C).
Wydaje się, że byłoby wiele sytuacji, w których wbudowanie tych narzędzi sprawiłoby różnicę między tym, czy rozwiązanie w skrypcie powłoki ma akceptowalną wydajność.
Oczywiście istnieje powód, dla którego nie zdecydowano się na wbudowanie tych narzędzi. Być może posiadanie jednej wersji narzędzia na poziomie systemu pozwala uniknąć używania wielu różnych wersji tego narzędzia przez różne powłoki. Naprawdę nie mogę wymyślić wielu innych powodów, aby utrzymać narzut związany z tworzeniem tak wielu nowych procesów, a POSIX wystarczająco definiuje narzędzia, że różne implementacje nie wydają się dużym problemem, o ile każdy z nich jest POSIX zgodny. Przynajmniej nie tak duży problem, jak nieefektywność posiadania tak wielu procesów.
printf
itp.) Zostały włączone do powłok, gdy uznano je za wystarczająco użyteczne.
awk
to obowiązkowe narzędzie w POSIX, a szczególnie dobrze nadają się (czyli bardzo szybki) w celu wdrożenia skryptów, które można realizować w inny sposób za pomocą sed
, cut
, tr
, grep
, i expr
w skrypcie powłoki.