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