¿Podría alguien explicar cómo funciona el exit
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 adicionales 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 recibía una serie de errores, y luego el terminal se cierra como se esperaba. Los errores parecen sugerir que mi llamada a exit
está activando una llamada rm ~/anaconda3/.../
y está rm ~/PyCharm/....
causando 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
archivo, 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 con la palabra "núcleo" en ellos, y eliminarlos también. Este era un preajuste en el sistema.
fuente
exit
sale de esa sesión de terminal, o eso sucede cada vez que lo usaexit
?exit
es un alias?core
archivos es porque generalmente son archivos de volcado de memoria ( volcados de núcleo ) que ocupan espacio pero rara vez son útiles a menos que esté desarrollando el software de bloqueo. En este caso, está intentando eliminar un directorio llamadocore
, que falla (y lo bueno es que falla, ¡numpy.core
es esencial para NumPy!).ulimit -c 0
el valor predeterminado) Esefind -exec rm
comando no es algo que quisiera de todos modos, pero podría agregarlo-type f
. También puede hacer que sea mucho más eficiente eliminar múltiples archivos mediante el uso en-exec rm {} +
lugar de... \;
, por lo que agrupa varios argumentos en unarm
línea de comando (como xargs)Respuestas:
Por lo general, solo vería la ejecución al salir de un shell si ha configurado esto manualmente. Pero tal vez uno de los paquetes que ha instalado viene con un script de shell de salida bash ...
cheque;
tal vez encuentres una llamada de guión desde allí, es extraña ...
fuente
find -xdev ...
.man bash
Tales trampas se usan a menudo para limpiar archivos tmp en la salida, consulte /programming/687014/removing-created-temp-files-in-unexpected-bash-exit
Defina una trampa de salida como esta (para una mejor prueba en un nuevo shell):
Mostrar trampa EXIT definida:
Prueba:
Tenga en cuenta que también
exit
se puede "llamar" implícitamente. Entonces, en lugar deexit
ti, también podrías haber activado la trampakill -HUP $$
.fuente
type -a exit
->exit is a shell builtin
es cómo saber leer la página de manual de bash (o ejecutar enhelp exit
lugar de man) en primer lugar.El
exit
comando es un comando incorporado especial en shells. Tiene que estar incorporado ya que necesita salir del proceso de shell.Sale del shell con el estado de salida proporcionado, si lo hay, o el del último comando.
Al salir, el shell ejecutará las
EXIT
trampas si las hay. Vea la salida detrap
(en shells tipo Bourne) para los actualmente configurados.Con muchas conchas, si los depósitos se invocó como un shell de entrada (algunos sistemas / usuarios configurar emuladores de terminal para iniciar un shell de entrada), sino que también ejecute el código almacenado en archivos especiales como
~/.logout
,~/.zlogout
,~/.bash_logout
y, posiblemente, los correspondientes en/etc
función de la concha .Puede hacer una
set -x
antes de llamarexit
para tener una idea de dónde se ejecutan esos comandos.fuente
set -x
set -x
salida ejecutando bash de una manera que no borre o cierre el terminal después de que salga, o tal vez al hacerloset -x
,exec &> exit_log.txt
luego escriba a ciegasexit
.exit
es un comando "incorporado" de bash, por lo que no es de extrañar queman exit
no ayude.Se puede obtener la documentación adecuada de las páginas del manual
man bash
o con el comando incorporadohelp
de bash (help exit
).Si realmente quiere saber cómo funciona, eche un vistazo a la fuente: http://git.savannah.gnu.org/cgit/bash.git/tree/builtins/exit.def?h=bash-4.4
fuente