POSIX define a opção -p
para o command
builtin so ...
-
-p
Execute a pesquisa de comandos usando um valor padrão para o PATH que garante a localização de todos os utilitários padrão.
Obtida com as opções -v
e -V
para a saída (respectivamente) analisável ou amigável para humanos da localização de command
, e você pode confiar bastante nela para obter o utilitário pretendido quando você pedir um. Aqui está um pequeno script para demonstrar como funciona:
( cd ~; mkdir -p bin
cat >./bin/cat
chmod +x ./bin/cat
export "PATH=$HOME/bin:$PATH"
command -V cat | cat
) <<\NOTCAT
#!/bin/sh
command -p cat
! printf "I'm not REALLY cat, but '%s' is!\n" \
"$(command -pv cat)"
NOTCAT
OUTPUT
cat is /home/mikeserv/bin/cat
I'm not REALLY cat, but '/bin/cat' is!
As primeiras declarações duplas criam um script executável em ~ / bin / cat. $PATH
também é modificado para inserir ~/bin
em sua cabeça.
Então, quando eu faço command -V cat | cat
command
escreve no stdin falso do meu cat
. E ainda assim sua saída ainda chega à minha tela. Isso ocorre porque command -p cat
obtém a real, independentemente de como eu perdi meu $PATH
.