Состояния Справочника Bash:
Встроенные команды необходимы для реализации функциональности, невозможной или неудобной для получения с отдельными утилитами.
Таким образом, оболочки разработаны, чтобы только включать встроенные команды если:
ls
команда не соответствует ни одному вышеупомянутому requirments.
Однако вот не ограничение программирования, которое предотвратило бы ls
будучи implmented как встроенное, которое выполняется в том же процессе как интерпретатор удара. Причины дизайна команд, не являющихся implmented как созданная-ins оболочка:
Относительно первой причины - Вы хотите, чтобы оболочка была максимально независима и эластична. Вы не хотите, чтобы оболочка застряла на ls
из NFS монтируют, что это "не отвечает, все еще пробуя".
Относительно второй причины - Во многих экземплярах Вы могли бы хотеть использовать оболочку для системы, которая использует Busybox или другую файловую систему, которая имеет другое ls
реализация. Или даже используйте тот же источник оболочки в ОС, которые имеют отличающийся ls
реализации.
Относительно третьей причины - Для выражения такой как find . -type d | xargs ls -lad
это было бы трудно или невозможно реализовать ls
в том же процессе как интерпретатор оболочки.
Относительно четвертой причины - Некоторые ls
команды могут занять много времени для завершения. Вы могли бы хотеть, чтобы оболочка продолжила выполнение чего-то еще тем временем.
Примечание: См. это полезное сообщение Warren Young в ответ на подобный вопрос.
Например, в случае Debian это находится в этом init-скрипте: /etc/init.d/checkfs.sh
(и /etc/init.d/checkroot.sh
, и любая из их символических ссылок):
...
if [ -f /forcefsck ] || grep -s -w -i "forcefsck" /proc/cmdline
...