Как определяется «встроенная» команда bash?

Как определяется «встроенная» команда bash?

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

решение1

Builtins — это просто часть 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(т. н. э. [...]) и 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

Связанный контент