Это правило «как будто».
Проще говоря: поведение оболочки в том виде, в каком ее видят пользователи, не должно меняться, если реализация решит сделать стандартную внешнюю команду также доступной в качестве встроенной оболочки.
Контраст, который я показал на /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является инструментом для управления его работой.
дальнейшее чтение