Al principio, estaba buscando la razón por la que which
no sale nada después de darle ciertos programas como argumento, por ejemplo cd
.
Por lo que he encontrado aquí , la razón probablemente sea que cd
en mi máquina hay una función, que se confirma al ejecutarse type cd
.
TLDR: Pero como los programas normales que which
pueden ubicarse gracias a las $PATH
variables se colocan en una de esas $PATH
carpetas, ¿dónde se cd
almacenan las funciones o los scripts ?
user@linuxmchine:~$ type cd
cd is a function
cd ()
{
__zsh_like_cd cd "$@"
}
linux
bash
shell-script
Gabrijel Šimunović
fuente
fuente
cd is a shell builtin
. Eche un vistazo a la página de manual de su shell (zsh?)Respuestas:
Funciones definidas por el usuario.
Por lo general, las funciones de bash se almacenan permanentemente en un
bash
script de inicio./etc/profile
para shells de inicio de sesión y/etc/bashrc
para shells interactivos.~/.bash_profile
de inicio : para shells de inicio de sesión y~/.bashrc
para shells interactivos.man
página bash en la sección INVOCACIÓN.Las funciones de shell definidas por el usuario se cargan dinámicamente en un hash (o tabla de búsqueda) cuando se inicia bash. Desde el archivo fuente bash,
variable.c
la definición de la tabla es:Las funciones definidas por el usuario se pueden enumerar con el
declare
comando bash , aún se utilizan otros shellstypeset
. En bashdeclare
ha reemplazado eltypeset
comando.Las funciones existen en la memoria durante la vida útil del bash shell.
Funciones definidas por shell (integradas)
Estas son funciones comunes, tales como
echo
,printf
,cd
y:
. Se compilan en una biblioteca que está vinculada albash
ejecutable. Construir las definiciones en el ejecutable ahorra tiempo en comparación con cargar una definición externa. Las definiciones de estas funciones (contenidas en.def
archivos fuente que se analizan en fuente C) se guardan en elbuiltins
directorio de fuente bash.Un lado útil: para obtener información sobre el uso de un comando de shell incorporado
help <command>
. p.ejfuente
typeset
que mostraría qué archivo / script causó la creación / cambio de una función?declare
otypeset
para mostrar el archivo fuente de una definición de función. Creo que es un problema de ingeniería de software. Recientemente encontré una función de shell definida en un.alias
archivo, ¡no es lo que esperaba!Las funciones de shell se almacenan en la memoria del shell (o, tal vez, en archivos temporales no documentados). No existen en cualquier forma utilizable hasta que inicia el shell (por ejemplo, cuando se conecta a una CLI, o iniciar una ventana de shell como
xterm
) y se definen (por ejemplo, mediante la lectura.bashrc
,.bash_profile
o algo similar) y dejan de existe cuando el shell termina.fuente
cd () { pwd; builtin cd "$@"; }
en el símbolo del sistema, el único lugar que está almacenado es en la memoria de su shell actualmente en ejecución. (Mi ejemplo es Bash, pero el mismo principio se aplica a cualquier caparazón)cd
y otros comandos comunes comoecho
,type
yalias
se llaman builtins .Los comandos incorporados están contenidos dentro del propio shell y los diferentes shells pueden tener diferentes comandos integrados.
fuente
cd
está contenido en el programa de shell en sí, por ejemplo, dentro del archivo/bin/bash
si ese es su shell. (Creo que su redacción aquí es clara, pero he visto a personas confundirse por todo tipo de cosas).La pregunta del Superusuario Encontrar la definición de una función bash está estrechamente relacionada con esta. El usuario HairOfTheDog proporcionó esta respuesta (parafraseada):
Lo anterior podría funcionar solo en
bash
, y no en shells POSIX en general.¡Gracias a Blue Raspberry por encontrar esto!
fuente