Al principio, estaba buscando la razón por la que whichno 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 cden mi máquina hay una función, que se confirma al ejecutarse type cd.
TLDR: Pero como los programas normales que whichpueden ubicarse gracias a las $PATHvariables se colocan en una de esas $PATHcarpetas, ¿dónde se cdalmacenan 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
bashscript de inicio./etc/profilepara shells de inicio de sesión y/etc/bashrcpara shells interactivos.~/.bash_profilede inicio : para shells de inicio de sesión y~/.bashrcpara shells interactivos.manpá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.cla definición de la tabla es:Las funciones definidas por el usuario se pueden enumerar con el
declarecomando bash , aún se utilizan otros shellstypeset. En bashdeclareha reemplazado eltypesetcomando.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,cdy:. Se compilan en una biblioteca que está vinculada albashejecutable. Construir las definiciones en el ejecutable ahorra tiempo en comparación con cargar una definición externa. Las definiciones de estas funciones (contenidas en.defarchivos fuente que se analizan en fuente C) se guardan en elbuiltinsdirectorio de fuente bash.Un lado útil: para obtener información sobre el uso de un comando de shell incorporado
help <command>. p.ejfuente
typesetque mostraría qué archivo / script causó la creación / cambio de una función?declareotypesetpara 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.aliasarchivo, ¡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_profileo 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)cdy otros comandos comunes comoecho,typeyaliasse llaman builtins .Los comandos incorporados están contenidos dentro del propio shell y los diferentes shells pueden tener diferentes comandos integrados.
fuente
cdestá contenido en el programa de shell en sí, por ejemplo, dentro del archivo/bin/bashsi 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