Así que me he estado preguntando cómo ejecutar estas dos líneas de código cada vez que cierro una instancia abierta de Terminal:
history -c
cat /dev/null > ~/.bash_history
Estoy export HISTFILE=5
en el inicio, pero todavía quiero eliminar eso cuando haya terminado.
He intentado mirar un poco en un par de lugares , y no he tenido mucha suerte .
Ejecuto Linux Mint, y también notaría aquí que me encontré con un problema similar con .bash_profile
; finalmente, descubrí que necesitaba colocar todo el código de inicio .bashrc
, así que tal vez eso tenga algo que ver con eso. Aquí está mi .bash_logout
archivo:
#!/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
He intentado reorganizar este script de muchas maneras, no estoy seguro si no entiendo cómo funciona bash, y si algo de esto se está ejecutando en primer lugar. ¿El hecho de que ejecuto Xserver
hace que bash considere Terminal algo que no es un cierre de sesión al salir?
Sí dice que estoy no inscrito, lo cual tendría sentido:
$> shopt login_shell
login_shell off
fuente
echo
comando al inicio, antes de que haga cualquier otra cosa que pueda interferir con laecho
ejecución. Un error puede hacer que el script salga antes de que llegue al final.shopt login_shell
diceRespuestas:
Suponiendo que haya verificado que es un shell de inicio de sesión (
shopt login_shell
):~ / .bash_logout solo se ejecuta si sale explícitamente del shell con
exit
ologout
, o al presionar Control-D para ingresar un final de archivo en el símbolo del sistema. Si cierra el emulador de terminal, los procesos se envían SIGHUP y bash no ejecuta ~ / .bash_logout en ese caso.Si desea realizar un trabajo en cualquier momento, bash sale (y si es un shell de inicio de sesión o no), use
trap foo EXIT
. La forma más conveniente de hacer esto es poner su código en una función de shell, por ejemplo:fuente
~/.bash_logout
solo se ejecuta mediante un shell de inicio de sesión (como el que tiene en las sesiones tty o conbash -l
). Es ignorado por los shells sin inicio de sesión, que ejecutan la mayoría de los terminales.Consulte la página del manual de bash (1), en "INVOCACIÓN", para obtener más detalles.
Si no desea mantener un historial persistente, simplemente desarme
HISTFILE
o configureHISTFILE=/dev/null
. Esto descartará automáticamente el historial al salir, al tiempo que permite que se mantenga para el shell actual (HISTSIZE=100
).fuente