Wie funktioniert der Exit-Befehl auf einem Unix-Terminal?

Wie funktioniert der Exit-Befehl auf einem Unix-Terminal?

Könnte jemand bitte erklären, wie der exitBefehl im Unix-Terminal funktioniert?

Eine Suche unter man exitund which exitwar nicht hilfreich und ich bin auf das folgende Problem gestoßen.

Nachdem ich Zusatzpakete für Anaconda und PyCharm auf meinem neuen Red Hat-System installiert hatte, bemerkte ich, dass jedes Mal, wenn ich exitzum Beenden einer Terminalsitzung aufrief, eine Reihe von Fehlern auftrat und das Terminal dann wie erwartet beendet wurde. Die Fehler scheinen darauf hinzudeuten, dass mein Aufruf von exiteinen Aufruf auslöst rm ~/anaconda3/.../und rm ~/PyCharm/....einen Fehler verursacht. Alle Verzeichnisse scheinen auch die Speicherorte der Pakete zu sein, die ich für diese Programme heruntergeladen habe (z. B. Numpy), siehe unten.

$ exit
rm: cannot remove ‘~/anaconda3/lib/python3.5/site-packages/numpy/core’: Is a directory
...
...

Gelöst

In meiner ~/.bash_logoutDatei gab es eine Zeile

find ~ -xdev ( -name *~ -o -name .*~ -o -name core ) -exec \rm '{}' \;

Das Auskommentieren dieser Zeile stoppte die Fehlermeldungen. Es scheint, als ob alle temporären Dateien gesucht und gelöscht werden. Es versucht aber auch, Verzeichnisse zu finden, die das Wort „core“ enthalten, und diese ebenfalls zu löschen. Dies war eine Voreinstellung im System.

Antwort1

man bash

  exit [n]
         [...]  A trap on EXIT is executed before the shell terminates.

Solche Traps werden oft verwendet, um temporäre Dateien beim Beenden zu bereinigen, siehe https://stackoverflow.com/questions/687014/removing-created-temp-files-in-unexpected-bash-exit

Definieren Sie eine Exit-Trap wie diese (für bessere Tests in einer neuen Shell):

$ bash
$ trap "rm filetodelete" EXIT

Definierte EXIT-Trap anzeigen:

$ trap -p EXIT
trap -- 'rm filetodelete' EXIT

Prüfen:

$ exit
rm: cannot remove ‘filetodelete’: No such file or directory

Beachten Sie, dass exitauch implizit „aufgerufen“ werden kann. Statt exithätten Sie die Falle also auch durch auslösen können kill -HUP $$.

Antwort2

Normalerweise sehen Sie die Ausführung nur beim Beenden einer Shell, wenn Sie dies manuell konfiguriert haben. Aber vielleicht war eines der von Ihnen installierten Pakete mit einem Bash-Exit-Shell-Skript ausgestattet ...

überprüfen;

~/.bash_logout

vielleicht finden Sie dort einen Skriptaufruf, es ist ein seltsamer ...

Antwort3

Der exitBefehl ist ein speziellereingebautBefehl in Shells. Er muss integriert sein, da er den Shell-Prozess beenden muss.

Es beendet die Shell mit dem angegebenen Beendigungsstatus (sofern vorhanden) oder andernfalls mit dem des letzten Befehls.

Beim Beenden führt die Shell die EXITTraps aus, falls vorhanden. Die aktuell gesetzten Traps finden Sie in der Ausgabe trap(in Bourne-ähnlichen Shells).

Bei vielen Shells gilt: Wenn die Shell als Anmelde-Shell aufgerufen wurde (einige Systeme/Benutzer konfigurieren Terminalemulatoren zum Starten einer Anmelde-Shell), wird je nach Shell auch der in speziellen Dateien wie ~/.logout, und möglicherweise entsprechenden Dateien in gespeicherte Code ausgeführt.~/.zlogout~/.bash_logout/etc

Sie können set -xvor dem Aufruf einen Befehl ausführen exit, um eine Vorstellung davon zu bekommen, von wo aus diese Befehle ausgeführt werden.

Antwort4

exitist ein „integrierter“ Befehl der Bash, also kein Wunder, dass man exites nicht hilft.

Eine entsprechende Dokumentation erhalten Sie aus den Manualpages man bashoder mit dem integrierten Befehl helpbash ( 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.
$

Wenn duWirklichwill wissenWiees funktioniert, schauen Sie sich die Quelle an:http://git.savannah.gnu.org/cgit/bash.git/tree/builtins/exit.def?h=bash-4.4

verwandte Informationen