Zastanawiałem się więc, jak uruchomić te dwa wiersze kodu za każdym razem, gdy zamykam otwartą instancję Terminala:
history -c
cat /dev/null > ~/.bash_history
Jestem export HISTFILE=5
przy starcie, ale nadal chcę to wypłukać, kiedy skończę.
Próbowałem rozejrzeć się trochę w kilku miejscach i nie miałem szczęścia .
Korzystam z Linux Mint i tutaj też zauważam, że napotkałem podobny problem z .bash_profile
; w końcu odkryłem, że muszę umieścić cały kod startowy .bashrc
, więc może to ma coś z tym wspólnego. Oto mój .bash_logout
plik:
#!/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
Próbowałem zmienić aranżację tego skryptu na wiele sposobów, nie jestem pewien, czy nie rozumiem, jak działa bash i czy którykolwiek z nich działa w pierwszej kolejności. Czy fakt, że uruchamiam Xserver
make bash, uważa Terminal za coś, co nie jest wylogowaniem przy wyjściu?
To nie znaczy, że jestem nie zalogowany, który ma sensu:
$> shopt login_shell
login_shell off
źródło
echo
polecenia na początku, zanim zrobi cokolwiek innego, co mogłoby zakłócićecho
uruchamianie. Błąd może spowodować, że skrypt zakończy działanie, zanim dotrze do końca.shopt login_shell
mówiOdpowiedzi:
Zakładając, że zweryfikowałeś, że jest to powłoka logowania (
shopt login_shell
):~ / .bash_logout jest uruchamiany tylko wtedy, gdy jawnie zamkniesz powłokę za pomocą
exit
lublogout
, lub wpisując Control-D, aby wprowadzić koniec pliku w wierszu polecenia. Jeśli zamkniesz emulator terminala, procesy są wysyłane SIGHUP, a bash nie uruchamia się ~ / .bash_logout w tym przypadku.Jeśli chcesz wykonywać pracę za każdym razem, gdy kończysz bash (i czy jest to powłoka logowania, czy nie), użyj
trap foo EXIT
. Najwygodniejszym sposobem na to jest umieszczenie kodu w funkcji powłoki, np .:źródło
~/.bash_logout
jest uruchamiany tylko przez powłokę logowania (taką jak ta, którą dostajesz na sesjach tty lub zbash -l
). Jest ignorowany przez powłoki niezalogowane, które działają na większości terminali.Więcej informacji znajduje się na stronie podręcznika bash (1), w części „ZAPROSZENIE”.
Jeśli nie chcesz zachować trwałej historii, po prostu ją rozbrój
HISTFILE
lub ustawHISTFILE=/dev/null
. Spowoduje to automatyczne odrzucenie historii przy wyjściu, jednocześnie umożliwiając zachowanie jej dla bieżącej powłoki (HISTSIZE=100
).źródło