La shell Watanabe ha tre tipi di built-in, descritti in dettaglio nel suo manuale. Qui sono elencati anche tutti i comandi integrati, ma si deve dedurre che qualcosa è un comando incorporato "normale" dall'assenza di una nota che dice che il comando è un "speciale" o un "semi-speciale" built-in. I built-in regolari non sono contrassegnati.
printf
è uno di questi "normale" incorporato. In modalità nativa viene sempre invocato, indipendentemente dal fatto che sia stato trovato un comando esterno con quel nome.
$ PATH = / usr / bin
$ printf
printf: questo comando richiede un operando
$ type printf
printf: un normale built-in in / usr / bin / printf
$
$ PATH = /
$ printf
printf: questo comando richiede un operando
$ type printf
printf: un normale built-in (non trovato in $ PATH)
$
Ma quando l' posixly-correct
opzione shell è impostata, è solo integrata se il comando esterno può essere trovato su PATH
.
$ set --posixly-correct
$
$ PATH = / usr / bin
$ printf
printf: questo comando richiede un operando
$
$ PATH = /
$ printf
yash: nessun comando `printf '
$
Questo è in realtà conforme a ciò che dice la specifica Unix singola, e lo ha detto almeno dal 1997.
Differisce dalla shell Z, dalla shell Korn 93, dalla shell Bourne Again e dalla shell Debian Almquist, nessuna delle quali implementa o documenta tale comportamento per i normali built-in. La shell Z, ad esempio, documenta che i normali built-in vengono sempre trovati, prima del passaggio di ricerca PATH
. Lo stesso vale per la shell Debian Almquist. Ed è quello che fanno tutte queste shell, anche se invocate come sh
con le loro opzioni POSIX di accensione.
% / bin / exec -a sh zsh -c "PATH = /; type printf; printf"
printf è una shell integrata
zsh: printf: 1: argomenti insufficienti
% / bin / exec -a sh ksh93 -c "PERCORSO = /; tipo printf; printf"
printf è una shell integrata
Utilizzo: printf [opzioni] formato [stringa ...]
% / bin / exec -a sh bash --posix -c "PATH = / type printf; printf"
printf è una shell integrata
printf: use: printf [-v var] format [argomenti]
% / bin / exec -a sh dash -c "PATH = /; type printf; printf"
printf è una shell integrata
sh: 1: printf: use: printf format [arg ...]
%
Tuttavia, non è in esecuzione printf
quando non è PATH
presente il comportamento della shell PD Korn, della shell Heirloom Bourne e della shell MirBSD Korn; perché non hanno un printf
built-in in primo luogo. ☺
% / bin / exec -a sh `command -v ksh` -c" PATH = /; type printf; printf "
printf non trovato
sh: printf: non trovato
% / bin / exec -a sh `command -v oksh` -c" PATH = /; type printf; printf "
printf non trovato
sh: printf: non trovato
% / bin / exec -a sh `command -v jsh` -c" PATH = /; type printf; printf "
printf non trovato
sh: printf: non trovato
% / bin / exec -a sh mksh -c "PATH = /; type printf; printf"
printf non trovato
sh: printf: non trovato
% ksh -c "type printf; printf"
printf è un alias tracciato per / usr / bin / printf
utilizzo: formato printf [argomenti ...]
% oksh -c "type printf; printf"
printf è un alias tracciato per / usr / bin / printf
utilizzo: formato printf [argomenti ...]
% jsh -c "type printf; printf"
printf è cancellato (/ usr / bin / printf)
utilizzo: formato printf [argomenti ...]
% mksh -c "type printf; printf"
printf è un alias tracciato per / usr / bin / printf
utilizzo: formato printf [argomenti ...]
$
PATH
per un normale built-in da eseguire - quindi ti preghiamo di porre la tua domanda al riguardo.