Почему некоторые команды bash являются встроенными и внешними? - PullRequest
0 голосов
/ 18 ноября 2018

Некоторые команды являются внутренними встроенными командами bash, а другие являются внешними (другие программы). Я понимаю, почему определенные команды должны быть встроены. Некоторые из причин:

  1. Если команде необходимо изменить внутреннее состояние процесса оболочки.
  2. Если команда выполняет основную операцию в оболочке.
  3. Если команда вызывается часто и должна быть выполнена быстро. Внешняя команда выполняется путем загрузки внешней программы и, следовательно, медленнее.

Но почему некоторые команды являются встроенными и внешними, например, echo и test? Я понимаю, что эхо часто используется и, следовательно, является встроенным (причина 3). Но тогда зачем использовать его как внешнюю команду и иметь двоичный файл для него в / bin / echo? Встроенная версия echo всегда будет иметь приоритет над внешней версией, и поэтому внешняя версия почти никогда не используется. Так зачем тогда вообще иметь внешнюю версию?

1 Ответ

0 голосов
/ 18 ноября 2018

Это как раз ваша точка 3. Когда команда делает очень мало (echo - хороший пример), порождение нового процесса доминирует в поведении во время выполнения. С растущими дисками, пропускной способностью и базами кода вы всегда достигаете точки, когда у вас так много данных и так много файлов (наша база кода на работе имеет 100 тыс. Файлов !!), что на один спавн на файл приходится разница в минуты.

Именно поэтому типичная встроенная функция представляет собой замену, которая принимает (возможно, расширенный набор) тех же аргументов, что и двоичный файл.

Вы также спрашиваете, почему старый двоичный файл все еще сохраняется, хотя bash имеет его как встроенный & mdash; Ответ в том, что многие программы полагаются на существование этого /bin/echo. Это на самом деле стандартизировано.

bash - это только один из многих пользовательских интерфейсов и автономных командных интерпретаторов. Все они имеют разные наборы встроенных модулей. Некоторые оболочки преднамеренно малы и во многом полагаются на то, что можно назвать «устаревшими» двоичными файлами. Одним из примеров является ash и его преемник dash. dash теперь является значением по умолчанию /bin/sh в Ubuntu и Debian из-за его скорости и популярно для встроенных систем из-за своего небольшого размера. (Но даже dash имеет встроенные функции для echo, test и десятков других команд и предоставляет историю команд для интерактивного использования.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...