Существует два класса встроенных функций:
Некоторые команды должны быть встроены в саму программу оболочки, потому что они не могут работать, если они являются внешними.
cd
является одним из таких, поскольку, если бы он был внешним, он мог бы изменить только свой собственный каталог; это не могло повлиять на текущий рабочий каталог оболочки. (Смотрите также: Почему это cd
не программа? )
Другой класс команд встроен в оболочку исключительно для эффективности.
Страница людей имеет раздел встроенных команд , в котором упоминается , и в качестве примеров команд в этом классе.dash
printf
echo
test
Системы Unix всегда включали отдельные исполняемые файлы для команд этого второго класса. Эти отдельные исполняемые файлы все еще доступны в каждой системе Unixy, которую я использовал, хотя они также встроены в каждую оболочку, которую вы, вероятно, будете использовать. ( POSIX фактически требует наличия этих исполняемых файлов.)
Я считаю, echo
что встроен в оболочку в AT & T Unix System V Release 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, но если вы посмотрите на man-страницу 4.3BSD sh.1 , вы увидите, что echo
ее нет в списке встроенных команд раздела «Специальные команды». Если CSRG сделает это, то мы будем нуждаться в документированном источнике, чтобы это доказать.
В этот момент вы можете задаться вопросом, echo
был ли он встроен в оболочку раньше, чем SVR3.1, и что этот факт просто не был задокументирован до этого момента. Новейший исходный код Unix для AT & T до SVR3, доступный мне, находится в архиве PDP-11 System III , в котором вы найдете исходный код оболочки 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..
*/