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 .
Respuestas:
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 fes una función.
$ which a
alias a='cat'
/usr/bin/cat
Sabemos que aes un alias.
$ which yes
/usr/bin/yes
Sabemos que yeses 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'
typees preferible whichpara casi todos los propósitos. Ver unix.stackexchange.com/q/85249/135943
La definición de a functionestá 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 commandes 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 programes 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, functionsson un subconjunto lógico del programa. Llamar a uno está completamente dentro de su proceso. Se commandpuede 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.