Para descobrir se um comando está embutido, execute type
.
$ type echo
echo is a shell builtin
type
é em si um builtin e sabe quais comandos são construídos. (No bash, builtins podem ser desabilitados, e type
informará corretamente que um comando não está embutido se o builtin tiver sido desabilitado). type
relata o que será executado se você usar o nome do comando - alias, função, comando interno ou externo.
which
é um comando externo que informa a localização de comandos externos. Não sabe nada sobre aliases, funções ou builtins. E pode até não informar os comandos externos corretos, dependendo da sua configuração. Apenas esqueça sobre which
e use type
.
I must be running the builtin, and presumably that's
/bin/echo
Não! Por definição, um builtin não é um comando externo. O código que implementa o echo
incorporado, como todos os outros recursos internos, está em /bin/bash
. /bin/echo
é um comando externo com o mesmo nome que o echo
construído.
Quando um comando existe como um comando interno e externo, usar seu nome chama o interno. A ordem de precedência para nomes de comandos é alias, depois function, then builtin e, em seguida, comando externo nos diretórios listados em $PATH
em ordem. Se, por algum motivo, você quiser forçar um comando externo, use o caminho completo.