cd
oprócz tego, że jest wbudowaną powłoką, w rzeczywistości jest także programem w systemach operacyjnych zgodnych z POSIX. Oni muszą zapewnić niezależne pliki wykonywalne dla zwykłych narzędzi, jak cd
. Jest to na przykład miejsce w przypadku systemu Solaris , AIX , HP-UX i OSX .
Oczywiście wbudowane narzędzie cd
jest nadal obowiązkowe, ponieważ jego zewnętrzna implementacja nie zmienia bieżącego katalogu powłoki. To ostatnie może być jednak nadal przydatne. Oto przykład pokazujący, jak POSIX wyobraża sobie, jak cd
można użyć tego polecenia:
find . -type d -exec cd {} \;
W systemie POSIX ten oneliner zgłasza komunikat o błędzie dla wszystkich katalogów, do których nie wolno ci wchodzić cd
. W większości dystrybucji Gnu / Linux nie wyświetla się ten komunikat o błędzie:
find: `cd': No such file or directory
Oto odpowiedź na pytanie „ Dlaczego cd nie jest programem? ” Jednego z oryginalnych współautorów Uniksa. Na bardzo wczesnej implementacji Uniksa cd
( chdir
w tym czasie pisownia ) był programem zewnętrznym. Właśnie przestał działać nieoczekiwanie po fork
pierwszym wdrożeniu.
Cytując Dennisa Ritchiego :
W trakcie naszej radości odkryto, że polecenie chdir (zmień katalog bieżący) przestało działać. Było dużo czytania kodu i niepokojąca introspekcja o tym, jak dodanie widelca mogło przerwać połączenie chdir. W końcu dotarła prawda: w starym systemie chdir było zwykłym poleceniem; dostosowało bieżący katalog (unikalnego) procesu dołączonego do terminala. W nowym systemie komenda chdir poprawnie zmieniła bieżący katalog procesu utworzonego w celu jego wykonania, ale proces ten został natychmiast zakończony i nie miał żadnego wpływu na jego powłokę nadrzędną! Konieczne było uczynienie chdir specjalnym poleceniem wykonywanym wewnętrznie w powłoce. Okazuje się, że kilka funkcji podobnych do poleceń ma tę samą właściwość, na przykład logowanie.
Źródło: Dennis M. Ritchie, „ Ewolucja uniksowego systemu podziału czasu ”, AT&T Bell Laboratories Technical Journal 63 (6), część 2, październik 1984, s. 1577–93
Strona podręcznika chdir dla Unix Version 1 (marzec 1971) stwierdza:
Ponieważ tworzony jest nowy proces do wykonania każdej komendy, chdir byłby nieskuteczny, gdyby został napisany jako normalna komenda. Jest zatem rozpoznawany i wykonywany przez Shell.