cd
ist nicht nur eine eingebaute Shell, sondern auch ein Programm für POSIX-kompatible Betriebssysteme. Sie müssen unabhängige ausführbare Dateien für reguläre Dienstprogramme wie bereitstellen cd
. Dies ist beispielsweise bei Solaris , AIX , HP-UX und OS X der Fall .
Ein Builtin cd
ist natürlich immer noch obligatorisch, da seine externe Implementierung das aktuelle Shell-Verzeichnis nicht ändert. Letzteres kann jedoch immer noch nützlich sein. Das folgende Beispiel zeigt, wie POSIX die Verwendung dieses cd
Befehls vorstellt :
find . -type d -exec cd {} \;
Auf einem POSIX-System meldet dieser Oneliner eine Fehlermeldung für alle Verzeichnisse, in denen Sie nicht zugelassen sind cd
. Bei den meisten Gnu / Linux-Distributionen schlägt diese Fehlermeldung jedoch fehl:
find: `cd': No such file or directory
Und hier ist die Antwort auf Ihre Frage: " Warum ist CD kein Programm? ", Von einem der ursprünglichen Unix-Co-Autoren. Bei einer sehr frühen Unix-Implementierung war cd
( chdir
zu dieser Zeit geschrieben) ein externes Programm. Es hat nur unerwartet aufgehört zu funktionieren, nachdem fork
es zum ersten Mal implementiert wurde.
Zitat von Dennis Ritchie :
Inmitten unseres Jubels wurde festgestellt, dass der Befehl chdir (change current directory) nicht mehr funktioniert. Es wurde viel Code gelesen und es wurde ängstlich darüber nachgedacht, wie das Hinzufügen von fork den chdir-Aufruf unterbrochen haben könnte. Schließlich dämmerte die Wahrheit: Im alten System war chdir ein gewöhnlicher Befehl; es hat das aktuelle Verzeichnis des (eindeutigen) Prozesses angepasst, der an das Terminal angehängt ist. Unter dem neuen System hat der Befehl chdir das aktuelle Verzeichnis des zu seiner Ausführung erstellten Prozesses korrekt geändert. Dieser Prozess wurde jedoch sofort beendet und hatte keinerlei Auswirkungen auf die übergeordnete Shell. Chdir musste zu einem speziellen Befehl gemacht werden, der intern in der Shell ausgeführt wurde. Es stellt sich heraus, dass mehrere befehlsähnliche Funktionen dieselbe Eigenschaft haben, zum Beispiel login.
Quelle: Dennis M. Ritchie, „ Die Entwicklung des Unix-Timesharing-Systems “, AT & T Bell Laboratories, Technical Journal 63 (6), Teil 2, Oktober 1984, S. 1577–93
Unix-Version 1 (März 1971) Die Handbuchseite von chdir lautet:
Da ein neuer Prozess erstellt wird, um jeden Befehl auszuführen, wäre chdir ineffektiv, wenn es als normaler Befehl geschrieben würde. Es wird daher von der Shell erkannt und ausgeführt.