Встроенная оболочка буквально встроена в сам исполняемый файл оболочки. Он вызывается оболочкой не как отдельный процесс, а просто как обычный вызов функции внутри процесса оболочки. Поэтому, если вы хотите найти его исходный код, вам нужно посмотреть в исходный код bash
.
Для многих встроенных функций, таких как cd
, основная причина этого быть встроенным в том, что он изменяет состояние самой оболочки. Было бы бессмысленно иметь cd
в качестве отдельного процесса, поскольку этот процесс будет изменять только свой текущий каталог, а не каталог процесса оболочки. В случае history
причина, по-видимому, заключается в том, что ~/.bash_history
записывается только при выходе из оболочки, поэтому команде также необходим доступ к истории текущего сеанса в памяти, которая содержится в работающей bash
обработать. Для других встроенных функций, таких как echo
, причина заключается в производительности: предполагается, что команда используется так часто, что мы хотим избежать порождения нового процесса каждый раз, когда он вызывается (но если вы действительно хотите процесс, есть также /bin/echo
, который может вести себя по-разному).