Існує два класи вбудованих:
Деякі команди повинні бути вбудовані в програму оболонки, оскільки вони не можуть працювати, якщо вони зовнішні.
cd
є одним з таких, оскільки якби він був зовнішнім, він міг би змінити лише власний каталог; це не могло вплинути на поточний робочий каталог оболонки. (Див. Також: Чому це cd
не програма? )
Інший клас команд вбудований в оболонку виключно для ефективності.
Сторінка людей має розділ вбудованих команд , в якому згадується , і в якості прикладів команд в цьому класі.dash
printf
echo
test
Системи Unix завжди включали окремі виконувані файли для команд цього другого класу. Ці окремі виконувані файли все ще доступні у всій системі Unixy, яку я використовував, хоча вони також вбудовані у кожну оболонку, яку ви, ймовірно, використовуєте. ( POSIX фактично вимагає наявності цих виконуваних файлів.)
Я вважаю, що echo
він вбудований в оболонку в AT&T Unix System V Випуск 3.1. Я базую це на порівнянні двох різних видань посібників для систем Unix AT & Ts 3B1 серії . Хтось люб’язно просканував 1986 року видання цих посібників і розмістив їх в Інтернеті ; вони відповідають оригінальному випуску SVR3. Ви можете бачити, що echo
його немає в списку на сторінці 523 керівництва користувача UNIX System V, том II , де ви очікували б цього, якби команда була вбудована в оболонку. У моїй місцевої паперової копії SVR3.1 посібників з 1987 року, echo
знаходиться в списку в цьому розділі керівництва.
Я впевнений, що це не нововведення Berkeley CSRG, яке AT&T повернуло додому. 4.3BSD з'явився в тому ж році, що і SVR3, 1986, але якщо ви подивитесь на сторінку 1 -ї shBS 4.3BSD , ви побачите, що echo
її немає в списку вбудованих команд розділу "Спеціальні команди". Якщо CSRG це зробив, це залишає нас бажати документально підтвердженого джерела.
На даний момент ви можете задуматися, чи echo
вбудований він в оболонку раніше, ніж SVR3.1, і що цей факт просто не був задокументований до цього часу. Найновіший доступний для мене вихідний код pred-SVR3 AT&T Unix знаходиться у PDP-11 System III tarball , де ви знайдете вихідний код оболонки Bourne. Ви не знайдете echo
у вбудованій командній таблиці, в якій знаходиться /usr/src/cmd/sh/msg.c
. Виходячи з часових позначок у цьому файлі, це доводить, що echo
точно не було в оболонці в 1980 році.
Дрібниці
Цей самий каталог також містить файл, builtin.c
який називається, який не містить нічого точного для цього питання, але ми знаходимо цей цікавий коментар:
/*
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..
*/