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