As funções são equivalentes aos comandos incorporados na linguagem de script bash / shell?

0

Exemplo

$ echo "This is great"
This is great
$ num2=2
$ num3="Three"
$ echo $num2
2
$ echo $num3
Three

Redefinindo o eco:

$ echo(){ command echo "The command was redefined"; }
$ echo $num2
The command was redefined
$ echo $?
The command was redefined

Então isso é verdade? Todos os comandos do shell do Unix funcionam e podemos manipulá-los assim? Eu sou um iniciante shell unix / linux. Tentando entender o poder e as capacidades da linguagem. Agradecemos antecipadamente.

    
por Nik-Lz 20.09.2017 / 16:41

2 respostas

1

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).

    
por 20.09.2017 / 17:22
3

Não. Enquanto builtins podem ser acessados através do mesmo namespace como funções, eles ainda são entidades separadas e podem ser acessados, mesmo quando sombreados por uma função, através do comando builtin builtin (para diversão extra, é claro que você pode redefinir builtin ☺ ). Note também que se você tiver unset -f echo , você terá o retorno interno.

Builtins também são, como o nome sugere, embutidos e implementados (no caso de bash) no código C gerado a partir de arquivos como echo.def .

    
por 20.09.2017 / 16:47