Це правило «ніби».
Простіше кажучи: поведінка оболонки, як бачать користувачі, не повинна змінюватися, якщо програма вирішить зробити стандартну зовнішню команду також доступною як вбудована оболонка.
Контраст, який я виявив на /unix//a/496291/5132 між поведінкою (з одного боку) PD Korn, MirBSD Korn та Heirloom Bourne; (з іншого боку) оболонки Z, 93 Korn, Bourne Again та Debian Almquist; і (на захоплюючій руці) оболонка Ватанабе підкреслює це.
Для оболонок, які не мають printf
вбудованого, витяг /usr/bin
з них PATH
викликає printf
припинення роботи. Відповідна поведінка POSIX, що демонструється оболонкою Watanabe у відповідному режимі, викликає той же результат. Поведінка оболонки, яка має printf
вбудований , ніби викликає зовнішню команду.
Тоді як поведінка всіх невідповідних оболонок не змінюється, якщо /usr/bin
їх вилучено PATH
, і вони не ведуть себе так, ніби викликають зовнішню команду.
Що стандарт намагається гарантувати вам, це те, що оболонки можуть вбудовувати всі види звичайних зовнішніх команд (або реалізовувати їх як власні функції оболонки), і ви все одно отримаєте таку ж поведінку від вбудованих, як і ви за допомогою зовнішніх команд, якщо ви налаштовуєте, PATH
щоб зупинити пошук команд. PATH
залишається вашим інструментом для вибору та контролю, які команди можна викликати.
(Як пояснено на /unix//a/448799/5132 , роки тому люди обирали особистість свого Unix, змінюючи те, що було PATH
.)
Можна подумати, що зробити команду завжди працює незалежно від того, чи можна її знайти PATH
, насправді є сенс вбудувати звичайно зовнішні команди. (Тому мій набір інструментів nosh просто отримав вбудовану printenv
команду у версії 1.38. Насправді це не оболонка.)
Але стандарт дає вам гарантію, що ви побачите таку саму поведінку для звичайних зовнішніх команд, які не включені PATH
в оболонку, як ви побачите в інших програмах, які не викликають оболонки, що викликають execvpe()
функцію, і оболонка не зможе магічно запустіть (мабуть) звичайні зовнішні команди, які інші програми не можуть знайти з такими ж PATH
. Все працює самостійно з точки зору користувача та PATH
є інструментом для контролю того, як він працює.
Подальше читання