O shell Watanabe possui três tipos de embutidos, descritos em detalhes em seu manual. Todos os comandos internos também estão listados lá, mas é preciso inferir que algo é um comando interno "regular" devido à ausência de qualquer nota dizendo que o comando é "especial" ou "semi-especial" construídas em. Os embutidos regulares não são marcados.
printf
é um desses "regulares" embutidos. No modo nativo, é sempre invocado, independentemente de haver um comando externo encontrado por esse nome.
$ PATH = / usr / bin
$ printf
printf: este comando requer um operando
$ tipo printf
printf: um arquivo embutido comum em / usr / bin / printf
$
$ PATH = /
$ printf
printf: este comando requer um operando
$ tipo printf
printf: um built-in regular (não encontrado em $ PATH)
$
Mas quando a posixly-correct
opção de shell é definida, é apenas um recurso interno se o comando externo puder ser encontrado no PATH
.
$ set --posixly-correct
$
$ PATH = / usr / bin
$ printf
printf: este comando requer um operando
$
$ PATH = /
$ printf
yash: não existe esse comando `printf '
$
Na verdade, isso está em conformidade com o que a Especificação Unix Unificada diz e diz desde pelo menos 1997.
Difere do shell Z, do shell 93 Korn, do shell Bourne Again e do shell Debian Almquist, nenhum dos quais implementa ou documenta esse comportamento para os built-ins regulares. O shell Z, por exemplo, documenta que os embutidos regulares sempre são encontrados, antes da etapa que procura PATH
. O mesmo acontece com o shell Debian Almquist. E é isso que todos os shells fazem, mesmo que sejam invocados como sh
nas opções de ativação do POSIX.
% / bin / exec -a sh zsh -c "CAMINHO = /; digite printf; printf"
printf é um shell embutido
zsh: printf: 1: argumentos insuficientes
% / bin / exec -a sh ksh93 -c "CAMINHO = /; digite printf; printf"
printf é um shell embutido
Uso: printf [opções] formato [string ...]
% / bin / exec -a sh bash --posix -c "CAMINHO = / tipo printf; printf"
printf é um shell embutido
printf: use: printf [-v var] formato [argumentos]
% / bin / exec -a sh dash -c "CAMINHO = /; digite printf; printf"
printf é um shell embutido
sh: 1: printf: uso: formato printf [arg ...]
%
No entanto, não executar printf
quando não estiver PATH
ativado é o comportamento do shell PD Korn, shell Heirloom Bourne e shell MirBSD Korn; porque eles não têm um printf
built-in em primeiro lugar. ☺
% / bin / exec -a sh `comando -v ksh` -c" PATH = /; tipo printf; printf "
printf não encontrado
sh: printf: não encontrado
% / bin / exec -a sh `comando -v oksh` -c" PATH = /; digite printf; printf "
printf não encontrado
sh: printf: não encontrado
% / bin / exec -a sh `comando -v jsh` -c" PATH = /; tipo printf; printf "
printf não encontrado
sh: printf: não encontrado
% / bin / exec -a sh mksh -c "CAMINHO = /; tipo printf; printf"
printf não encontrado
sh: printf: não encontrado
% ksh -c "tipo printf; printf"
printf é um alias rastreado para / usr / bin / printf
uso: formato printf [argumentos ...]
% oksh -c "tipo printf; printf"
printf é um alias rastreado para / usr / bin / printf
uso: formato printf [argumentos ...]
% jsh -c "tipo printf; printf"
printf está com hash (/ usr / bin / printf)
uso: formato printf [argumentos ...]
% mksh -c "tipo printf; printf"
printf é um alias rastreado para / usr / bin / printf
uso: formato printf [argumentos ...]
$
PATH
para que um built-in regular para ser executado - então faça sua pergunta sobre isso.