Описание тега hand-and-foot
Нет резкой границы между оболочкой и приложениями.
Некоторые из команд, которые можно запускать в консоли должны быть встроены в оболочки, потому что они действуют на процесс Shell. Например, компакт-диск
изменения оболочки рабочего каталога, и это не может быть сделано снаружи, так что компакт-диск
должен быть встроен в команду. Но это деталь реализации. Обычный пользователь не должен знать, что есть технические причины, которые заставляют компакт-диск
, чтобы быть встроенным в команду.
В другую крайность, есть большие приложения, которые сделаны разными авторами, такие как Firefox или Emacs. Это не собирается быть встроены в любые оболочки, потому что они слишком большие. Но это не принципиальная невозможность, просто вопрос дизайна. Для примера, есть shells1, что есть примитивы для создания простых GUI-приложений.
В середине, есть команды, которые могли бы пойти в любую сторону. Например, Эхо
команды не должны быть встроены в оболочку, но почти каждый снаряд построил его, потому что он очень маленький, и используется часто, так что должно быть эффективно. Другой пример - убить
, что для повседневного использования может быть внешней команды, но имеющие встроенный имеет несколько преимуществ: вы можете призвать его, даже если вы достигли лимита на количество процессов, и вы можете дать ему Шелл номером задания (убить %2
) вместо идентификатора процесса. Даже [ ... ]
строительства (который может также быть написан тест
) может, в принципе, быть внешняя команда, но построен на снаряды по той же причине, как эхо
.
Если вам интересно, вы можете проверить статус данной команды с тип
команды. Например, в моей конфигурации:
% тип А тип setenv СР в Emacs
в то время как это зарезервированное слово
тип-раковины встроенные
setenv-это функция оболочки
СР-это псевдоним для СР -я
Emacs-это /usr/Бен/в Emacs
Зарезервированные слова, такие как время
и тогда
часть оболочки синтаксис. Примитивы-это команды, встроенные в оболочку и не требует внешнего исполняемого файла. Функции являются составными командами, которые определены и имени пользователя, и может быть названа их именем. Псевдонимы пользовательские короткие имена для длинных команд (ведет себя по-разному из функций). Последний пример-внешняя команда.
1 dtksh. Нет свободной реализации.