Que distinção você está fazendo entre "pequeno programa" e "função"?
JdeBP # 13/18
Você pode inserir comandos em um programa shell que permite programar o shell para funcionar e assumir o comando utilizando funções com as quais o shell foi programado para comandar outros programas a partir das funções do shell.
Txtechhelp 14/09/19
Respostas:
15
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:
Além disso, um comando que é um programa em uma implementação do * nix pode se tornar um shell embutido (= função) em outra.
Jamesqf # 13/18
1
@ jamesqf, sim, o shell possui ferramentas padrão integradas, mas os comandos embutidos não são os mesmos que funções. Execute por exemplosh -c 'type true; f() { echo x; }; type f'
@ilkkachu: Isso depende da sua definição de "o mesmo que". É claro que eles são implementados de maneira diferente, mas para o usuário comum digitando um comando, eles são funcionalmente iguais.
jamesqf
1
@ jamesqf, mesmo que o usuário comum não use (saiba como) usar funções, alegar que é o mesmo que builtins é apenas confuso.
Ilkkachu # 14/18
4
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.
"uma função retorna um único valor e não produz nada" - bem, sim, talvez no sentido matemático. Mas em linguagens de programação imperativas, é realmente comum "função" significar apenas uma sub-rotina, uma que poderia fazer qualquer coisa. E as funções de shell em particular podem muito bem ter saída ou outros efeitos colaterais, uma vez que o valor de retorno das funções é muito limitado.
ilkkachu
@ilkkachu. Obrigado. Eu atualizei a resposta. Sinta-se livre para revisar ;-)
3
Eu acho que essas definições são de um contexto de linguagem de programação, não de um contexto de shell. Sim, eu sei que a linguagem shell é uma linguagem de programação, mas sua ideia de uma "função" é bem diferente da definição matemática ou da ciência da computação - no shell, todos os comandos (sejam builtins, funções, aliases, programas ou scripts) agem iguais e são simplesmente diferentes tipos de implementação.
21418 Toby Speight
1
... * principalmente * iguais; builtins podem alterar o estado do próprio shell, enquanto programas externos não podem chamar chdir()ou setenv()no shell que é, para eles, um processo pai distinto.
Charles Duffy
1
Gostaria de saber se os comandos que chamamos no shell são funções ou programas?
Sim.
Especificamente, quando você digita algum texto e pressiona enter, o shell deve determinar se é:
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:
Sabemos que
f
é uma função.Sabemos que
a
é um apelido.Sabemos que
yes
é um programa.A concha possui um
echo
…... 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:fonte
sh -c 'type true; f() { echo x; }; type f'
type
é preferível awhich
quase todos os fins. Consulte unix.stackexchange.com/q/85249/135943A definição de a
function
está 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,
functions
são subconjuntos lógicos do programa. Chamar um é inteiramente dentro do seu processo. Ocommand
é 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.fonte
chdir()
ousetenv()
no shell que é, para eles, um processo pai distinto.Sim.
Especificamente, quando você digita algum texto e pressiona
enter
, o shell deve determinar se é:alias
,fonte