Я только что начал использовать Linux, и мне любопытно как оболочка встроенные команды такой как cd
определяются.
Кроме того, я ценил бы, если кто-то мог бы объяснить, как они реализованы и выполнены.
Встроенный модуль оболочки -- http://linux.about.com/library/cmd/blcmdl1_builtin.htm например -
which cd
/usr/bin/which: no cd in (/usr/bin:/usr/local/bin......
Не встроенная оболочка, а двоичный файл.
which ls
/bin/ls
Манджари, Проверьте исходный код оболочки bash с ftp://ftp.gnu.org/gnu/bash/bash-2.05b.tar.gz Вы обнаружите, что определение встроенных команд оболочки не в отдельном двоичном исполняемом файле, а в самом двоичном файле оболочки (имя встроенной оболочки явно указывает на это).
Если вы хотите увидеть, как встраиваемые модули bash определяются, то вам просто нужно заглянуть в раздел 4 The Bash Man Page.
Если же вы хотите узнать, как bash bultins реализованы, вам нужно посмотреть исходный код Bash, потому что эти команды компилируются в исполняемый файл bash.
Одним из быстрых и простых способов узнать, является ли команда встроенной в bash, является использование команды help
. Например, help cd
покажет вам, как определена встроенная команда bash 'cd'. Аналогично для help echo
.
Фактический набор встроенных модулей варьируется от оболочки к оболочке. Это:
Вы можете узнать, встроена ли утилита, используя команду type
, которая поддерживается большинством оболочек (хотя ее вывод не стандартизирован). Пример из утилиты dash
:
$ type ls
ls is /bin/ls
$ type cd
cd is a shell builtin
$ type exit
exit is a special shell builtin
Re cd
, теоретически ничто не мешает разработчику оболочки реализовать ее как внешнюю команду. cd
не может напрямую изменить текущий каталог оболочки, но, например, cd
может передать новый каталог процессу оболочки через сокет. Но никто так не делает, потому что в этом нет смысла. За исключением очень старых оболочек (в которых не было понятия встроенных модулей), где cd
использовал для выполнения своей работы какой-то грязный системный хак.
Как cd
реализован внутри оболочки? Базовый алгоритм описан здесь . Он также может выполнять некоторую работу по поддержке дополнительных функций оболочки.
http://ss64.com/bash/ это поможет вам.
и вот руководство по shell scripting guide