что такое оболочка встроенные команды в Linux?

Я только что начал использовать Linux, и мне любопытно как оболочка встроенные команды такой как cd определяются.

Кроме того, я ценил бы, если кто-то мог бы объяснить, как они реализованы и выполнены.

14
задан Matthias Braun 28 December 2017 в 21:08
поделиться

5 ответов

Встроенный модуль оболочки -- 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
1
ответ дан 1 December 2019 в 08:15
поделиться

Манджари, Проверьте исходный код оболочки bash с ftp://ftp.gnu.org/gnu/bash/bash-2.05b.tar.gz Вы обнаружите, что определение встроенных команд оболочки не в отдельном двоичном исполняемом файле, а в самом двоичном файле оболочки (имя встроенной оболочки явно указывает на это).

4
ответ дан 1 December 2019 в 08:15
поделиться

Если вы хотите увидеть, как встраиваемые модули bash определяются, то вам просто нужно заглянуть в раздел 4 The Bash Man Page.

Если же вы хотите узнать, как bash bultins реализованы, вам нужно посмотреть исходный код Bash, потому что эти команды компилируются в исполняемый файл bash.

Одним из быстрых и простых способов узнать, является ли команда встроенной в bash, является использование команды help. Например, help cd покажет вам, как определена встроенная команда bash 'cd'. Аналогично для help echo.

14
ответ дан 1 December 2019 в 08:15
поделиться

Фактический набор встроенных модулей варьируется от оболочки к оболочке. Это:

  • Специальные встроенные утилиты , которые должны быть встроены, потому что у них есть некоторые особые свойства.
  • Обычные встроенные утилиты , которые почти всегда встроены из-за производительность или другие соображения
  • Любая стандартная утилита также может быть встроена, если разработчик оболочки пожелает.

Вы можете узнать, встроена ли утилита, используя команду 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 реализован внутри оболочки? Базовый алгоритм описан здесь . Он также может выполнять некоторую работу по поддержке дополнительных функций оболочки.

12
ответ дан 1 December 2019 в 08:15
поделиться

http://ss64.com/bash/ это поможет вам.

и вот руководство по shell scripting guide

http://www.freeos.com/guides/lsst/

0
ответ дан 1 December 2019 в 08:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: