1

Я заметил, что такая команда, как cd .. на самом деле преобразуется во builtin cd .. и затем выполняется. Но как определяется builtin ? which builtin ничего не показывает и не находится в /bin , /usr/bin и т. д. Является ли это частью программы bash и обрабатывается по-другому?

1 ответ1

4

Встроенные команды - только часть bash. Вы можете узнать, встроена ли команда, используя type . Например:

$ type export cd source alias
export is a shell builtin
cd is a shell builtin
source is a shell builtin
alias is a shell builtin

Многие встроенные команды встроены, потому что они не могут работать иначе. cd и source являются примерами.

Другие встроены только для эффективности. test (AKA [...]) и echo - примеры.

Чтобы узнать больше, смотрите раздел SHELL BUILTIN COMMANDS man bash или онлайн- руководство по bash. Чтобы получить список доступных встроенных функций, запустите help из командной строки. Чтобы получить информацию о конкретном встроенном средстве, скажем, test , запустите help test . Обратите внимание, что help test предоставит информацию о встроенном test bash, в то время как « man test , скорее всего, предоставит справку по команде внешнего test .

Какие команды доступны как исполняемые, так и встроенные

С опцией -a , type будет отображать все места, которые содержат названную команду. Например:

$ type -a echo
echo is a shell builtin
echo is /bin/echo

Как использовать исполняемый файл, когда встроенная функция доступна

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

$ /bin/echo "This is not the builtin"
This is not the builtin

Поскольку встроенные функции обычно имеют больше функций, это обычно полезно только для тестирования совместимости.

Как выполнить встроенную оболочку, когда она скрыта функцией или псевдонимом

При наличии выбора оболочка обычно выбирает выполнение встроенной команды. Исключением является случай, когда пользователь определил псевдоним или функцию с тем же именем. Если вы хотите быть уверены, что выполняете встроенную функцию, используйте builtin команду:

$ builtin echo  1 2 3
1 2 3

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .