Qual é a diferença entre os termos “programa”, “comando” e “função” em Linux e Unix?

8

Eu gostaria de saber se os comandos que chamamos no shell são funções ou programas ?

    
por AymenTM 13.09.2018 / 13:11

3 respostas

14

Depende.

Os comandos podem cair em várias categorias: builtins, aliases, funções, executáveis (scripts e binários no caminho de pesquisa).

Na linha de comando, estes ocupam um único namespace simples que torna impossível a substituição. Existem inúmeras maneiras de dizer tipos de programas à parte:

$ f () { :; }
$ alias a=cat
$ which f
f ()
{ 
    :
}

Sabemos que f é uma função.

$ which a
alias a='cat'
        /usr/bin/cat

Sabemos que a é um alias.

$ which yes
/usr/bin/yes

Sabemos que yes é um programa.

$ builtin echo ; echo $?

0

O shell tem um echo construído…

$ builtin cat ; echo $?
bash: builtin: cat: not a shell builtin
1

… mas nenhum para cat . Se houver um builtin ou um alias mas você insiste em chamar o programa, prefixar o comando com uma barra invertida:

$ builtin true | printf "%d\n" $?
0
$ alias true=false
$ true ; printf "%d\n" $?
1
$ \true ; printf "%d\n" $?
0
    
por 13.09.2018 / 13:29
4

A definição de function está retornando valores únicos e não produz nada. As funções do shell, em particular, podem muito bem e poderiam ter uma saída ou outros efeitos colaterais, uma vez que o valor de retorno das funções é muito limitado.

A command é uma instrução dada por um usuário para dizer a um computador para fazer algo, por exemplo, executando um único programa ou um grupo de programas vinculados.

Um program é uma seqüência de instruções (ou seja, comandos) que são fornecidas a um computador e compreensíveis pela unidade central de processamento (CPU) do computador. estas instruções indicam quais operações o computador deve executar em um conjunto de dados.

Dito isto, functions é um subconjunto lógico do programa. Chamar um está inteiramente dentro do seu processo. O command é um programa (ou um shell embutido) pode ser executado a partir do shell de comando. O comando implementa funções que executam uma tarefa. O oposto não está correto.

    
por 13.09.2018 / 13:20
1

I would like to know whether the commands that we call in the shell are functions or programs?

Sim.

Especificamente, quando você digita algum texto e pressiona enter , o shell deve determinar se é:

  1. um alias ,
  2. uma função,
  3. um comando interno,
  4. um arquivo executável.
por 13.09.2018 / 18:43