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