Daher habe ich mich gefragt, wie diese beiden Codezeilen jedes Mal ausgeführt werden sollen, wenn ich eine offene Instanz von Terminal schließe:
history -c
cat /dev/null > ~/.bash_history
Ich bin export HISTFILE=5
beim Start, möchte das aber trotzdem ausspülen, wenn ich fertig bin.
Ich habe versucht , mich an einigen Stellen ein bisschen umzusehen , und hatte nicht viel Glück .
Ich verwende Linux Mint und möchte hier auch darauf hinweisen, dass ich auf ein ähnliches Problem mit gestoßen bin .bash_profile
. Schließlich stellte ich fest, dass ich den gesamten Startcode einfügen .bashrc
musste. Vielleicht hat das etwas damit zu tun. Hier ist meine .bash_logout
Datei:
#!/bin/bash
# ~/.bash_logout: executed by bash(1) when login shell exits.
#this does nothing on exit...
echo 'logout'; sleep 2s
# when leaving the console clear the screen to increase privacy
if [ "$SHLVL" = 1 ]; then
history -c
cat /dev/null > ~/.bash_history
[ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi
Ich habe versucht, dieses Skript auf viele Arten neu anzuordnen. Ich bin mir nicht sicher, ob ich nicht verstehe, wie Bash funktioniert, und ob irgendetwas davon überhaupt ausgeführt wird. Xserver
Betrachtet die Tatsache, dass ich Bash ausführe , Terminal als etwas, das sich beim Beenden nicht abmeldet?
Es heißt, dass ich nicht eingeloggt bin , was Sinn machen würde:
$> shopt login_shell
login_shell off
quelle
echo
Befehl am Anfang zu setzen, bevor er etwas anderes ausführt, dasecho
die Ausführung beeinträchtigen könnte . Ein Fehler kann dazu führen, dass das Skript beendet wird, bevor es das Ende erreicht.shopt login_shell
sagt das aus?Antworten:
Angenommen, Sie haben überprüft, dass es sich um eine Anmeldeshell handelt (
shopt login_shell
):~ / .bash_logout wird nur ausgeführt, wenn Sie die Shell explizit mit
exit
oderlogout
oder durch Eingabe von Control-D beenden, um an der Eingabeaufforderung ein Dateiende einzugeben. Wenn Sie den Terminalemulator schließen, werden Prozesse SIGHUP gesendet, und bash führt in diesem Fall ~ / .bash_logout nicht aus.Wenn Sie bei jedem Beenden von Bash Arbeiten ausführen möchten (und ob es sich um eine Anmeldeshell handelt oder nicht), verwenden Sie
trap foo EXIT
. Der bequemste Weg, dies zu tun, besteht darin, Ihren Code in eine Shell-Funktion einzufügen, z.quelle
~/.bash_logout
wird nur von einer Login- Shell ausgeführt (z. B. der, die Sie in tty-Sitzungen oder mit tty erhaltenbash -l
). Es wird von Nicht-Login-Shells ignoriert, die von den meisten Terminals ausgeführt werden.Weitere Informationen finden Sie auf der Handbuchseite von bash (1) unter "INVOCATION".
Wenn Sie den persistenten Verlauf nicht beibehalten möchten, deaktivieren
HISTFILE
oder setzen Sie ihn einfachHISTFILE=/dev/null
. Dadurch wird der Verlauf beim Beenden automatisch verworfen, während er weiterhin für die aktuelle Shell (HISTSIZE=100
) beibehalten werden kann .quelle