Não, todos os comandos do Unix não são funções do shell, mas podem ser substituídos por uma função do shell.
Os nomes das funções do shell não são restritos pelos nomes dos utilitários internos ou externos. Assim como você pode ter vários utilitários externos com o mesmo nome em caminhos diferentes, você também pode ter uma função de shell ou um alias com o mesmo nome.
Se houver uma função chamada foo
e um utilitário externo ou interno chamado foo
, a função foo
será chamada.
Para forçar o shell a escolher o utilitário interno, use
builtin foo
Para evitar o uso da função foo
, use
command foo
Para garantir que um utilitário externo seja usado em vez de uma função de shell, alias ou utilitário interno, use o caminho completo, por exemplo,
/bin/echo
Os aliases e as funções ocupam o mesmo namespace, portanto, você não pode ter um alias e uma função com o mesmo nome.
Resumindo:
Comandos Unix podem ser
- aliases ou
- funções do shell ou
- utilitários incorporados no shell ou
- utilitários externos (binários compilados ou scripts escritos em qualquer linguagem de script).
Alguns "comandos" não são comandos, mas palavras-chave, como for
e if
etc. Eles também podem ser substituídos por aliases e funções de shell para experiências de shell extra excitantes (isto é, não faça isso).