Я столкнулся с командой Linux builtin cd
.
В чем разница между командами builtin cd
и cd
?
На самом деле, я провел несколько исследований об этой разнице, но не смог найти замечательного и существенного объяснения этому.
bash
shell
cd-command
Goktug
источник
источник
Ответы:
Команда
cd
является встроенной, поэтому обычноbuiltin cd
выполняет то же самое, что иcd
. Но есть различие, еслиcd
оно переопределено как функция или псевдоним, и в этом случаеcd
вызовет функцию / псевдоним, ноbuiltin cd
все равно изменит каталог (другими словами, встроенная функция останется доступной, даже если она перекрыта функцией).Например:
Или с псевдонимом:
Использование
builtin
также является хорошим способом определенияcd
функции, которая что-то делает и меняет каталог (поскольку вызовcd
из нее будет просто вызывать функцию снова в бесконечной рекурсии.)Например:
источник
builtin cd mysubdir
и\cd mysubdir
?cd
, в этом случае обходится\cd
псевдоним и запускается функция. См stackoverflow.com/a/16506263/4518341В большинстве случаев нет никакой разницы (но см. Ниже). Команда
cd
является встроенной командой во всех оболочках. Он должен быть встроен в 1, так как внешняя команда не может изменить среду вызывающей оболочки, а изменение рабочего каталога представляет собой изменение в его среде.В
bash
команднойbuiltin
силы оболочки использовать встроенную версию команды, несмотря на то, что может быть оболочка функции, псевдоним или внешняя команда доступна с тем же именем.В случае, когда есть , например, функция оболочки с именем
cd
, то неbuiltin cd
будет вызывать это. Использование позволяет обойти любые перегруженные функции, которые могут быть добавлены пользователем через функцию оболочки или псевдоним.builtin cd
Пример:
cd
Встроенная команда может быть перегружена функцией , которая обновляет подсказку:где
__update_prompt
- некоторая другая пользовательская функция, которая выводит строку.Функция
builtin cd
in не будет вызывать функцию рекурсивно. Использованиеbuiltin cd
в оболочке, где эта функция активна, дополнительно не вызовет функцию.1 Есть Unices с внешней
cd
командой (macOS, и, я полагаю, Solaris). Цель этой команды, которая не может изменить рабочий каталог для оболочки, возможно, состоит в том, чтобы удовлетворить стандарт POSIX, который перечисляет вcd
качестве одной из внешних утилит, которые должны быть доступны (cd
не является одной из «специальных встроенных утилит») , Он может также служить в качестве теста , чтобы увидеть ли изменения каталога работы в данной директории будет возможно .источник
cd
командой.