¿Cómo funciona el comando de salida en una terminal Unix?

¿Cómo funciona el comando de salida en una terminal Unix?

¿Alguien podría explicar cómo exitfunciona el comando en la terminal Unix?

Una búsqueda de man exity which exitno 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 exitpara 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 exitestá 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_logoutexpediente, 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 exittambién se puede "llamar" implícitamente. Entonces, en lugar de exitti, 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 exitcomando 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 EXITtrampas, 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 -xllamada antes exitde tener una idea de dónde se ejecutan esos comandos.

Respuesta4

exites un comando "integrado" de bash, por lo que no es de extrañar man exitque no ayude.

Se puede obtener la documentación adecuada en las páginas del manual man basho con el comando integrado helpde 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

información relacionada