Gostaria de saber se os comandos que chamamos no shell são funções ou programas .
Gostaria de saber se os comandos que chamamos no shell são funções ou programas .
Respostas:
Depende.
Os comandos podem se dividir em várias categorias: builtins, aliases, funções, executáveis (scripts e binários no caminho de pesquisa).
Na linha de comando, eles ocupam um espaço de nome único e plano que possibilita a substituição. Existem várias maneiras de diferenciar tipos de programas:
$ 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 apelido.
$ which yes
/usr/bin/yes
Sabemos que yesé um programa.
$ builtin echo ; echo $?
0
A concha possui um echo…
$ builtin cat ; echo $?
bash: builtin: cat: not a shell builtin
1
... mas nenhum para cat. Se houver um alias interno ou um alias, mas você insistir em chamar o programa, prefixe 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
sh -c 'type true; f() { echo x; }; type f'
typeé preferível a whichquase todos os fins. Consulte unix.stackexchange.com/q/85249/135943
A definição de a functionestá retornando valores únicos e não produz nada. As funções do shell, em particular, podem muito bem e podem 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 instruir um computador a fazer algo, por exemplo, executar um único programa ou um grupo de programas vinculados.
A programé uma sequência de instruções (ou seja, comandos) 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, functionssão subconjuntos lógicos do programa. Chamar um é 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.
chdir()ou setenv()no shell que é, para eles, um processo pai distinto.