Linux / Comando type: identificar como o Bash resolve comandos
type é um comando interno do Bash que identifica como o shell interpreta um nome: alias, palavra reservada, função, comando interno ou arquivo executável. Use type -a nome quando houver candidatos com o mesmo nome e type -t nome para obter somente a categoria. Isso ajuda a explicar por que um comando executa algo diferente do esperado.
Shell é o interpretador de comandos. No Bash, type consulta o ambiente do próprio shell, incluindo seus aliases e funções; um utilitário externo como which pode ter outro comportamento. Para conhecer outros comandos, consulte a referência de comandos Linux em português.
O que é o comando type?
O Bash expande aliases durante a leitura de comandos, quando essa opção está ativa. Na execução de um nome simples sem barra, procura funções, comandos internos e, depois, arquivos executáveis. PATH é a lista de diretórios pesquisados, separados por dois-pontos. A regra de busca e execução do Bash explica também o cache de caminhos.
type pertence ao próprio Bash; não é necessário instalar um programa separado. Execute os exemplos no Bash, pois Zsh, Dash e outros shells podem oferecer opções diferentes. Você pode consultar a ajuda local com help type, seguindo o guia do comando help.
Sintaxe básica e tipos de resultado
type [-afptP] nome [nome ...]
O bloco anterior é um esquema: colchetes indicam opções ou nomes adicionais, e não devem ser digitados literalmente. Informe pelo menos um nome. Os comandos abaixo consultam a resolução desses nomes sem executá-los.
type ls
type cd
type if
type printf
A saída padrão traz uma descrição. Em um Bash sem personalizações, cd e printf normalmente aparecem como comandos internos, if como palavra reservada e ls como arquivo externo. Aliases e funções podem alterar o resultado; o texto descritivo também varia com o idioma.
| Tipo | Significado |
|---|---|
alias |
Abreviação expandida para outro texto quando o shell lê uma posição de comando e a expansão está ativa. |
keyword |
Palavras reservadas do shell, como if e for. |
function |
Funções definidas no shell atual. |
builtin |
Comandos internos incluídos no próprio Bash. |
file |
Arquivos executáveis externos encontrados através da pesquisa PATH. |
Consultar todos os candidatos com o mesmo nome
-a lista os candidatos com esse nome: aliases ativos, palavras reservadas, funções, comandos internos e arquivos encontrados nos diretórios de PATH. Essa consulta ajuda a localizar alternativas ocultas pela primeira correspondência.
type -a printf
type -a test
type -a ls
printf pode existir como comando interno e como executável externo. type printf descreve o primeiro resultado; type -a printf pode mostrar ambos. A presença e os caminhos dos arquivos dependem da instalação.
Opções para selecionar o formato de saída
Mostrar apenas a categoria com -t
-t imprime uma das categorias alias, keyword, function, builtin ou file. Em um Bash comum, os dois primeiros exemplos abaixo produzem builtin e keyword. Um nome desconhecido não gera categoria e causa estado de saída diferente de zero.
type -t cd
type -t if
type -t ls
Consultar caminhos com -p e -P
-p mostra um caminho quando a resolução normal é um arquivo externo. Se o primeiro resultado for alias, função ou comando interno, não imprime um caminho. Assim, type -p cd normalmente fica sem saída, mesmo que cd exista como comando interno; ausência de texto, sozinha, não comprova que o nome seja desconhecido.
type -p ls
type -p cd
-P procura um arquivo executável mesmo quando o nome também é alias, função ou comando interno. Isso permite encontrar a versão externa de printf ou test, se instalada; a opção apenas consulta e não muda a prioridade de execução de comandos posteriores.
type -P printf
type -P test
O hash é o cache de caminhos de executáveis. Quando há uma entrada armazenada, -p e -P podem mostrá-la em vez do primeiro arquivo de PATH. hash -r limpa esse cache no shell atual, sem remover arquivos. Para pesquisar todos os arquivos de PATH sem consultar o hash, use type -a -p nome.
Resumo das opções de type
| Opção | Descrição |
|---|---|
-a |
Imprime todos os candidatos que correspondem ao nome. |
-f |
Ignora a busca por funções; também funciona sem -a. |
-p |
Imprime o caminho quando o resultado da interpretação padrão é um executável externo. |
-P |
Consulta um arquivo externo mesmo que outro tipo tenha prioridade; não altera a execução futura. |
-t |
Mostra a categoria do comando em uma palavra. |
Quando aliases e funções mudam o comando
Consultar aliases
Em um shell interativo, aliases podem incluir opções frequentes. type ls mostra como o nome é interpretado; alias ls consulta a definição do alias. Se ele não estiver definido, essa segunda consulta pode retornar erro, o que é esperado.
type ls
alias ls
Nos exemplos abaixo, \ls evita a expansão do alias ls, mas ainda pode encontrar uma função com esse nome. Um caminho absoluto ignora a busca por nome no shell; confirme primeiro com type -P ls se /usr/bin/ls é o caminho correto no seu sistema. Diferentemente de type, as duas linhas abaixo executam o nome ou caminho indicado. Quando chegam ao ls externo padrão, listam o diretório atual.
\ls
/usr/bin/ls
Consultar definições de funções
Uma função pode ocultar um comando interno ou um executável de mesmo nome. deploy abaixo é apenas um nome de exemplo: substitua-o por uma função existente no seu shell. type deploy pode exibir sua definição e type -t deploy retorna function; se o nome não existir, as consultas falham sem executar implantação alguma.
type deploy
type -t deploy
Dentro de uma função, command nome ignora a busca por funções de mesmo nome, ajudando a evitar recursão. Isso ainda permite comandos internos; não significa “sempre executar um arquivo externo”. Por exemplo, command printf normalmente usa o comando interno do Bash. Para consultar sem executar, use command -v nome.
Comparar type, command -v e which
| Método | Recursos |
|---|---|
type nome |
Explica aliases, palavras reservadas, funções, comandos internos e arquivos no Bash em detalhes. |
type -a nome |
Verifica todos os candidatos possíveis com o mesmo nome. |
command -v nome |
Relativamente portátil para verificar a existência e a resolução de comandos em scripts shell. |
which nome |
Dependendo da implementação, encontra principalmente arquivos executáveis em PATH e pode não refletir com precisão funções shell ou aliases. |
type oferece detalhes úteis no Bash. Em scripts para shells POSIX, command -v nome é uma opção portátil para consultar se o nome é reconhecido; a saída não precisa ser um caminho, pois funções e comandos internos também podem ser encontrados. Uma consulta bem-sucedida não comprova que o comando aceitará argumentos específicos nem que terá permissão para realizar a tarefa.
Usar type em scripts Bash
Classificar um nome de comando
Salve o exemplo completo como classificar-comando.sh e execute bash classificar-comando.sh cd. Ele requer Bash e um único nome; a saída esperada nesse caso é cd: builtin. O separador -- impede que o nome recebido seja interpretado como opção de type.
#!/usr/bin/env bash
if [ "$#" -ne 1 ]; then
printf '%s\n' 'Uso: bash classificar-comando.sh nome' >&2
exit 1
fi
kind=$(type -t -- "$1") || {
printf 'Comando não encontrado: %s\n' "$1" >&2
exit 1
}
case $kind in
alias|function|builtin|file|keyword)
printf '%s: %s\n' "$1" "$kind"
;;
esac
Experimente também bash classificar-comando.sh if, cuja saída esperada é if: keyword. Um nome inexistente produz diagnóstico e estado 1; consulte echo "$?" logo após executar o script. Sem argumento, ele mostra a instrução de uso. Cada execução consulta o novo processo Bash: aliases e funções apenas locais ao shell pai não são transferidos automaticamente, e aliases ficam desativados por padrão em scripts.
Usar o estado de saída
Evite analisar frases descritivas, que variam com versão e idioma. O trecho seguinte imprime uma mensagem se git for reconhecido no ambiente atual; não executa o Git nem testa acesso a repositórios. Para vários nomes, type retorna sucesso apenas se todos forem encontrados. Um bloco if sem else também não deve ser usado sozinho como o estado final de um teste de ausência.
if type git >/dev/null 2>&1; then
printf '%s\n' 'git é reconhecido pelo shell.'
fi
Perguntas frequentes
Por que type -p não imprime nada?
Alias, função ou comando interno podem ter prioridade, embora o nome exista. Veja todos os candidatos com type -a nome e procure o arquivo externo com type -P nome. Se precisar somente da categoria, use type -t nome.
Por que ainda aparece um caminho antigo?
Inspecione o hash com hash e limpe-o com hash -r para repetir a consulta. No Bash, atribuir um novo valor a PATH já limpa o hash; não atribua automaticamente esse sintoma a um cache antigo após uma atribuição. Verifique também aliases, funções e se a alteração ocorreu no mesmo processo de shell. O exemplo abaixo consulta ls; substitua esse nome pelo desejado.
hash
hash -r
type -P ls
Por que um alias do terminal não aparece no script?
Um script normalmente inicia outro processo e não herda os aliases locais do terminal. Além disso, a expansão de aliases fica desativada por padrão no Bash não interativo, salvo configuração de expand_aliases. Na automação, prefira funções definidas no próprio script ou comandos explícitos; consulte as regras de aliases do Bash.
type só encontra a localização de executáveis?
Não. Ele mostra como o Bash interpreta o nome atualmente e distingue aliases, palavras reservadas, funções e comandos internos.
A ordem de type -a corresponde à execução?
Ela ajuda a entender os candidatos, mas não substitui a análise do contexto. Aliases dependem da expansão, palavras reservadas dependem da sintaxe e a execução de arquivos também considera o hash. Compare a consulta normal com type -a nome e, para arquivos sem o hash, type -a -p nome.
As opções são iguais em outros shells?
Não necessariamente. As opções deste artigo são do Bash. Consulte a documentação do shell realmente usado, como Zsh ou Dash, antes de reutilizá-las.
Resumo
type é uma ferramenta que distingue entre aliases, funções, comandos internos e arquivos executáveis com o mesmo nome e diagnostica a resolução real do comando. Com a saída padrão, você pode ler explicações, usar -a para encontrar todos os candidatos, -t para obter apenas o tipo, e -P para consultar arquivos executáveis externos mesmo quando outro tipo tem prioridade.
Quando um comando se comporta de forma inesperada, comece por type -a nome. Compare a categoria, a definição e os caminhos antes de alterar aliases, funções ou PATH; assim você pode escolher qual comportamento precisa corrigir.




