
¿Alguien podría explicar cómo exit
funciona el comando en la terminal Unix?
Una búsqueda de man exit
y which exit
no fue útil y me encontré con el siguiente problema.
Después de instalar paquetes complementarios para Anaconda y PyCharm en mi nuevo sistema Red Hat, noté que cada vez que llamaba exit
para salir de una sesión de terminal obtenía una serie de errores y luego el terminal se cierra como se esperaba. Los errores parecen sugerir que mi llamada a exit
está provocando una llamada rm ~/anaconda3/.../
y rm ~/PyCharm/....
provocando un error. Todos los directorios también parecen ser las ubicaciones de los paquetes que descargué para estos programas (es decir, numpy), ver más abajo.
$ exit
rm: cannot remove ‘~/anaconda3/lib/python3.5/site-packages/numpy/core’: Is a directory
...
...
Resuelto
En mi ~/.bash_logout
expediente, había una línea
find ~ -xdev ( -name *~ -o -name .*~ -o -name core ) -exec \rm '{}' \;
Al comentar esta línea se detuvieron los mensajes de error. Parece buscar y eliminar todos los archivos temporales. Pero también intenta encontrar directorios que contengan la palabra "núcleo" y eliminarlos también. Este era un valor preestablecido en el sistema.
Respuesta1
man bash
exit [n] [...] A trap on EXIT is executed before the shell terminates.
Estas trampas se utilizan a menudo para limpiar archivos tmp al salir, consulte https://stackoverflow.com/questions/687014/eliminar-created-temp-files-in-unexpected-bash-exit
Defina una trampa de salida como esta (para realizar mejores pruebas en un nuevo shell):
$ bash
$ trap "rm filetodelete" EXIT
Mostrar trampa de SALIDA definida:
$ trap -p EXIT
trap -- 'rm filetodelete' EXIT
Prueba:
$ exit
rm: cannot remove ‘filetodelete’: No such file or directory
Tenga en cuenta que exit
también se puede "llamar" implícitamente. Entonces, en lugar de exit
ti, también podrías haber activado la trampa kill -HUP $$
.
Respuesta2
Bueno, normalmente solo verás la ejecución al salir de un shell si lo has configurado manualmente. Pero tal vez uno de los paquetes que instaló vino con un script de salida de bash...
controlar;
~/.bash_logout
tal vez encuentres una llamada de guión desde allí, es extraña...
Respuesta3
El exit
comando es especial.incorporadocomando en conchas. Tiene que estar integrado ya que necesita salir del proceso de shell.
Sale del shell con el estado de salida proporcionado, si corresponde, o el del último comando en caso contrario.
Al salir, el shell ejecutará las EXIT
trampas, si las hay. Vea la salida de trap
(en shells tipo Bourne) para conocer los configurados actualmente.
Con muchos shells, si el shell se invocó como un shell de inicio de sesión (algunos sistemas/usuarios configuran emuladores de terminal para iniciar un shell de inicio de sesión), también ejecutará el código almacenado en archivos especiales como ~/.logout
, y posiblemente los correspondientes dependiendo del shell ~/.zlogout
. .~/.bash_logout
/etc
Puede hacer una set -x
llamada antes exit
de tener una idea de dónde se ejecutan esos comandos.
Respuesta4
exit
es un comando "integrado" de bash, por lo que no es de extrañar man exit
que no ayude.
Se puede obtener la documentación adecuada en las páginas del manual man bash
o con el comando integrado help
de bash ( help exit
).
$ help exit
exit: exit [n]
Exit the shell.
Exits the shell with a status of N. If N is omitted, the exit status
is that of the last command executed.
$
Si usteden realidadquieren sabercómoFunciona, echa un vistazo a la fuente:http://git.savannah.gnu.org/cgit/bash.git/tree/builtins/exit.def?h=bash-4.4