Esta é uma regra "como se".
Simplificando: o comportamento do shell, como os usuários o vêem, não deve mudar se uma implementação decidir disponibilizar um comando externo padrão também como embutido no shell.
O contraste que mostrei em /unix//a/496291/5132 entre os comportamentos (por um lado) dos projéteis PD Korn, MirBSD Korn e Heirloom Bourne; (por outro lado) as conchas Z, 93 Korn, Bourne Again e Debian Almquist; e (na mão emocionante) a concha Watanabe destaca isso.
Para os shells que não têm printf
como interno, a remoção /usr/bin
de PATH
faz uma invocação de printf
parar de funcionar. O comportamento de conformidade POSIX, exibido pelo shell Watanabe em seu modo de conformidade, causa o mesmo resultado. O comportamento do shell que possui um printf
built-in é como se estivesse invocando um comando externo.
Enquanto o comportamento de todos os shells não-conformes não se altera se /usr/bin
for removido PATH
e eles não se comportam como se estivessem invocando um comando externo.
O que o padrão está tentando garantir a você é que os shells podem incorporar todos os tipos de comandos normalmente externos (ou implementá-los como suas próprias funções de shell), e você ainda terá o mesmo comportamento dos incorporados que fez. com os comandos externos se você ajustar PATH
para impedir que os comandos sejam encontrados. PATH
continua sendo sua ferramenta para selecionar e controlar quais comandos você pode chamar.
(Como explicado em /unix//a/448799/5132 , anos atrás, as pessoas escolheram a personalidade de seu Unix alterando o que estava acontecendo PATH
.)
Pode-se opinar que fazer o comando sempre funcionar, independentemente de poder ser encontrado, PATH
é de fato o objetivo de criar comandos normalmente externos internos. (É por isso que meu conjunto de ferramentas nosh ganhou um printenv
comando interno na versão 1.38, de fato. Embora este não seja um shell.)
Mas o padrão está lhe dando a garantia de que você verá o mesmo comportamento para comandos externos regulares que não estão no PATH
shell, como verá em outros programas não-shell que invocam a execvpe()
função, e o shell não será capaz de magicamente execute (aparentemente) comandos externos comuns que outros programas não podem encontrar com o mesmo PATH
. Tudo funciona de forma autônoma da perspectiva do usuário e PATH
é a ferramenta para controlar como funciona.
Leitura adicional