Me gustaría saber si los comandos que llamamos en el shell son funciones o programas .
Me gustaría saber si los comandos que llamamos en el shell son funciones o programas .
Depende.
Los comandos pueden clasificarse en múltiples categorías: incorporados, alias, funciones, ejecutables (scripts y binarios en la ruta de búsqueda).
En la línea de comando, ocupan un espacio de nombres único y plano que hace posible la anulación. Existen numerosas formas de diferenciar los tipos de programas:
$ f () { :; }
$ alias a=cat
$ which f
f ()
{
:
}
Sabemos que f
es una función.
$ which a
alias a='cat'
/usr/bin/cat
Sabemos que a
es un alias.
$ which yes
/usr/bin/yes
Sabemos que yes
es un programa.
$ builtin echo ; echo $?
0
El caparazón tiene un echo
...
$ builtin cat ; echo $?
bash: builtin: cat: not a shell builtin
1
... pero ninguno para cat
. Si hay un alias incorporado o un alias pero insiste en llamar al programa, prefija el comando con una barra diagonal inversa:
$ 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
es preferible which
para casi todos los propósitos. Ver unix.stackexchange.com/q/85249/135943
La definición de a function
está devolviendo valores individuales y no genera nada. Las funciones de shell en particular pueden muy bien y podrían tener una salida u otros efectos secundarios, ya que el valor de retorno de las funciones es muy limitado.
A command
es una instrucción dada por un usuario para decirle a una computadora que haga algo, por ejemplo, ejecutar un solo programa o un grupo de programas vinculados.
A program
es una secuencia de instrucciones (es decir, comandos) que se entregan a una computadora y que la unidad central de procesamiento (CPU) de la computadora puede entender. Estas instrucciones indican qué operaciones debe realizar la computadora en un conjunto de datos.
Dicho esto, functions
son un subconjunto lógico del programa. Llamar a uno está completamente dentro de su proceso. Se command
puede ejecutar un programa (o un shell incorporado) desde el shell de comandos. El comando implementa funciones que realizan una tarea. Lo contrario no es correcto.
chdir()
o setenv()
en el shell que es, para ellos, un proceso padre distinto.
Me gustaría saber si los comandos que llamamos en el shell son funciones o programas.
Si.
Específicamente, cuando escribe un texto y presiona enter
, el shell debe determinar si es:
alias
,