Es gibt zwei Klassen von Buildins:
Einige Befehle müssen in das Shell-Programm selbst eingebaut werden, da sie nicht funktionieren, wenn sie extern sind.
cd
ist eines davon, da es, wenn es extern wäre, nur sein eigenes Verzeichnis ändern könnte; es konnte sich nicht auf das aktuelle Arbeitsverzeichnis der Shell auswirken. (Siehe auch: Warum ist cd
kein Programm? )
Die andere Klasse von Befehlen ist nur aus Effizienzgründen in die Shell integriert.
Der Mann Seite hat einen Abschnitt über builtins , die erwähnt , und als Beispiele für Befehle in dieser Klasse.dash
printf
echo
test
Unix-Systeme haben immer separate ausführbare Dateien für Befehle in dieser zweiten Klasse enthalten. Diese separaten ausführbaren Dateien sind weiterhin auf jedem von mir verwendeten Unixy-System verfügbar, obwohl sie auch in jede Shell integriert sind, die Sie wahrscheinlich verwenden. (Für POSIX müssen diese ausführbaren Dateien vorhanden sein.)
Ich glaube echo
, dass die Shell in AT & T Unix System V Release 3.1 eingebaut wurde. Ich stütze mich darauf, dass zwei verschiedene Ausgaben von Handbüchern für Unix-Systeme der AT & Ts 3B1-Serie verglichen werden . Jemand hat freundlicherweise 1986 Ausgaben dieser Handbücher gescannt und online gestellt . diese entsprechen der Originalversion von SVR3. Sie können sehen, dass dies echo
nicht in der Liste auf Seite 523 des UNIX System V-Benutzerhandbuchs, Band II , aufgeführt ist, wo Sie es erwarten würden, wenn der Befehl in die Shell integriert wäre. In meiner lokalen Papierkopie des SVR3.1 Handbücher von 1987, echo
wird in diesem Abschnitt des Handbuch aufgeführt.
Ich bin mir ziemlich sicher, dass dies keine Innovation von Berkeley CSRG ist , die AT & T nach Hause gebracht hat. 4.3BSD erschien im selben Jahr wie SVR3, 1986, aber wenn Sie sich die sh.1-Manpage von 4.3BSD ansehen , sehen Sie, dass diese echo
nicht in der Liste der eingebauten Befehle im Abschnitt "Spezielle Befehle" enthalten ist. Wenn CSRG dies getan hat, möchten wir eine dokumentierte Quelle, um dies zu beweisen.
An diesem Punkt werden Sie sich vielleicht fragen, ob echo
die Shell früher als SVR3.1 eingebaut wurde und ob diese Tatsache bis dahin einfach nicht dokumentiert war. Der neueste für mich verfügbare Pre-SVR3 AT & T Unix-Quellcode befindet sich im PDP-11 System III-Tarball , in dem sich der Bourne-Shell-Quellcode befindet. Sie werden es nicht echo
in der eingebauten Befehlstabelle finden, die sich in befindet /usr/src/cmd/sh/msg.c
. Basierend auf den Zeitstempeln in dieser Datei beweist dies, dass echo
es 1980 mit Sicherheit keine Shell gab.
Trivia
Das gleiche Verzeichnis enthält auch eine Datei mit dem Namen, builtin.c
die für diese Frage keine Informationen enthält, aber wir finden diesen interessanten Kommentar:
/*
builtin commands are those that Bourne did not intend
to be part of his shell.
Redirection of i/o, or rather the lack of it, is still a
problem..
*/