cd
на додаток до вбудованої оболонки, насправді це також програма на сумісних з POSIX ОС. Вони повинні забезпечувати незалежні виконувані файли для звичайних утиліт, наприклад cd
. Це, наприклад , у випадку з Solaris , AIX , HP-UX та OS X .
Очевидно, що вбудований cd
все ще є обов'язковим, оскільки його зовнішня реалізація не змінює поточний каталог оболонки. Однак останнє все ж може бути корисним. Ось приклад, який показує, як POSIX передбачає, як cd
можна використовувати цю команду:
find . -type d -exec cd {} \;
У системі POSIX цей oneliner повідомить про помилку для всіх каталогів, до яких ви не можете входити cd
. У більшості дистрибутивів Gnu / Linux він не працює з цим повідомленням про помилку:
find: `cd': No such file or directory
І ось відповідь на ваше запитання " Чому CD не програма? " Одного з оригінальних співавторів Unix. За дуже раннього впровадження Unix cd
(написана chdir
на той час) була зовнішньою програмою. Він просто перестав працювати несподівано після того, як fork
був вперше впроваджений.
Цитуючи Денніса Річі :
У розпал нашого радості було виявлено, що команда chdir (змінити поточний каталог) перестала працювати. Читалося читання коду та тривожний самоаналіз щодо того, як додавання вилки могло порушити дзвінок chdir. Нарешті правда осяяла: у старій системі chdir була звичайною командою; він скоригував поточний каталог (унікального) процесу, приєднаного до терміналу. У новій системі команда chdir правильно змінила поточний каталог процесу, створеного для його виконання, але цей процес негайно припинився і не мав жодного впливу на його батьківську оболонку! Необхідно було зробити chdir спеціальну команду, виконану внутрішньо всередині оболонки. Виявляється, кілька функцій, подібних до команд, мають однакову властивість, наприклад, вхід.
Джерело: Денніс М. Річі, « Еволюція системи розподілу часу Unix », Технічний журнал «AT&T Bell Laboratories» 63 (6), частина 2, жовтень 1984, с.1577–93
На сторінці керівництва chdir Unix версії 1 (березень 1971 р.) Зазначено :
Оскільки для виконання кожної команди створений новий процес, chdir був би неефективним, якби він був записаний як звичайна команда. Тому вона визнана і виконана Шеллом.