type
informa o que o shell usaria. Por exemplo:
$ type echo
echo is a shell builtin
$ type /bin/echo
/bin/echo is /bin/echo
Isso significa que se, no prompt bash, você digitar echo
, receberá o built-in. Se você especificar o caminho, como em /bin/echo
, você receberá o comando externo.
which
, pelo contrário, é um programa externo que não tem nenhum conhecimento especial do que o shell fará. Em sistemas parecidos com o debian, which
é um script de shell que procura o PATH pelo executável. Assim, ele lhe dará o nome do executável externo, mesmo se o shell usasse um built-in.
Se um comando só estiver disponível como um built-in, which
não retornará nada:
$ type help
help is a shell builtin
$ which help
$
Agora, vamos ver cat
:
$ type cat
cat is hashed (/bin/cat)
$ which cat
/bin/cat
cat
é um executável externo, não um shell embutido.