Що робить вбудована команда в bash?


35

Я знаю, що таке вбудована команда, але що робить builtinсама? Виконання which lsпоказує мені /bin/ls, але виконання which builtinнічого не повертає.

man builtinпросто дає мені список вбудованих команд, однією з яких є builtin. На решті сторінки man пояснюється, що таке вбудований, але не те, що builtinтаке.

builtin --helpкаже мені, builtin: usage: builtin [shell-builtin [arg ...]]але все одно не те, що робить.

Це частина bash таким чином, що інші вбудовані команди не є?


3
Ти забув help builtin.
Ігнасіо Васкес-Абрамс

3
which builtinне повертає результатів, оскільки whichповідомляє про розташування зовнішніх команд . Якщо ви запитаєте оболонку type builtin, вона скаже вам, не дивно, що це builtin is a shell builtin. Ви знайдете те саме з aliasі setт. Д.
Toby Speight

1
builtin help builtin
theonlygusti

Відповіді:


50

The builtin командному переконується запуску оболонку вбудованої версії команди замість виконання іншої команди з таким же ім'ям.

Наприклад, скажімо, що ви визначили функцію оболонки, іменовану cdдля друку додаткового статусу кожного разу, коли ви змінюєте каталоги. Але ви зіпсували це, і тепер ви не можете правильно змінити каталоги. Тож тепер ви можете набрати builtin cd ~успішно компакт-диск назад у свій домашній каталог без запущеної функції розбитої оболонки.

І до речі, у моїй копії сторінки bash man є розділ під назвою "SHELL BUILTIN COMMANDS", і він визначає значення builtinкоманди в цьому розділі (перекладено нижче).

вбудований shell-вбудований [аргументи]

    Виконати вказану вбудовану оболонку, передаючи їй аргументи, і
    повернути свій вихідний статус. Це корисно при визначенні функції
    назва якого те саме, що вбудована оболонка, зберігаючи
    функціональність вбудованого в рамках функції. Вбудований компакт-диск є
    зазвичай переосмислюється таким чином.

    Статус повернення помилковий, якщо вбудований оболонку не є вбудованою оболонкою
    командування.

14
приємна відповідь. Але мене здивує, як ти можеш бути впевнений, що builtinкоманда є справжнім вбудованим файлом bash?
Пакопако

14
@Pacopaco: Не можна :-). Ви можете перевизначити builtin, теж: function builtin { echo "Hi from builtin :-)"; }. Потім builtinбільше не працює.
sleske

12
@Pacopaco, type builtinпідкаже, чи справжнє це builtin? Якщо тільки typeйого не замінили на не вбудований type...
Toby Speight

10
о ... на жаль, можна: alias unset = "відміняється відлуння ехо"; alias alias = "Ехо-псевдонім переосмислений" ... Тож не щастить тут.
Олів'є Дулак

8
Я люблю цю постійну дискусію!
Сем Вівер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.