Der Zweck dieser Frage ist es, eine Neugierde zu beantworten und nicht ein bestimmtes Computerproblem zu lösen. Die Frage ist: Warum sind obligatorische POSIX-Dienstprogramme nicht allgemein in Shell-Implementierungen integriert?
Ich habe zum Beispiel ein Skript, das im Grunde genommen ein paar kleine Textdateien liest und überprüft, ob sie richtig formatiert sind, aber es dauert 27 Sekunden, bis sie auf meinem Computer ausgeführt werden, da ein erheblicher Teil der Zeichenfolgen bearbeitet wird. Diese String-Manipulation bringt Tausende neuer Prozesse hervor, indem verschiedene Dienstprogramme aufgerufen werden, daher die Langsamkeit. Ich bin mir ziemlich sicher , dass , wenn einige der Dienstprogramme in gebaut wurden, nämlich grep
, sed
, cut
, tr
, und expr
dann das Skript in einem zweiten laufen würde oder weniger (basierend auf meiner Erfahrung in C).
Es scheint viele Situationen zu geben, in denen der Einbau dieser Dienstprogramme den Unterschied zwischen einer akzeptablen Leistung einer Lösung in Shell-Skripten ausmacht.
Offensichtlich gibt es einen Grund, warum diese Dienstprogramme nicht integriert wurden. Wenn Sie möglicherweise eine Version eines Dienstprogramms auf Systemebene verwenden, wird vermieden, dass mehrere ungleiche Versionen dieses Dienstprogramms von verschiedenen Shells verwendet werden. Ich kann mir wirklich nicht viele andere Gründe vorstellen, um den Aufwand für die Erstellung so vieler neuer Prozesse zu verringern, und POSIX definiert die Dienstprogramme so genau, dass es kein großes Problem zu sein scheint, unterschiedliche Implementierungen zu haben, solange es sich um POSIX handelt konforme. Zumindest kein so großes Problem wie die Ineffizienz so vieler Prozesse.
printf
usw.) in Shells integriert, wenn sie als nützlich genug erachtet wurden.
awk
ein obligatorisches Dienstprogramm in POSIX und besonders gut geeignet (das, sehr schnell ist) Skripte zu implementieren , dass Sie sonst implementieren könnten mit sed
, cut
, tr
, grep
, und expr
in einem Shell - Skript.