Je me suis donc demandé comment exécuter ces deux lignes de code chaque fois que je ferme une instance ouverte de Terminal:
history -c
cat /dev/null > ~/.bash_history
Je suis export HISTFILE=5
au démarrage, mais je veux toujours éliminer cela lorsque j'aurai terminé.
J'ai essayé de regarder un peu dans quelques endroits et je n'ai pas eu beaucoup de chance .
Je lance Linux Mint, et je voudrais également noter ici que j'ai rencontré un problème similaire avec .bash_profile
; finalement, j'ai découvert que je devais placer tout le code de démarrage .bashrc
, alors peut-être que cela a quelque chose à voir avec cela. Voici mon .bash_logout
dossier:
#!/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
J'ai essayé de réorganiser ce script de nombreuses façons, je ne sais pas si je ne comprends pas comment fonctionne bash, et si tout cela fonctionne en premier lieu. Le fait que Xserver
j'exécute fasse bash considérer Terminal comme quelque chose qui n'est pas une déconnexion à la sortie?
Cela dit que je ne suis pas connecté, ce qui aurait du sens:
$> shopt login_shell
login_shell off
la source
echo
commande au début, avant qu'elle ne fasse quoi que ce soit qui pourrait interférer avec l'echo
exécution en cours d'exécution. Une erreur pourrait entraîner la fermeture du script avant la fin.shopt login_shell
dit-on?Réponses:
En supposant que vous avez vérifié qu'il s'agit d'un shell de connexion (
shopt login_shell
):~ / .bash_logout n'est exécuté que si vous quittez explicitement le shell avec
exit
oulogout
, ou en tapant Control-D pour entrer une fin de fichier à l'invite de commande. Si vous fermez l'émulateur de terminal, les processus sont envoyés SIGHUP et bash n'exécute pas ~ / .bash_logout dans ce cas.Si vous souhaitez effectuer un travail à chaque sortie de bash (et qu'il s'agisse d'un shell de connexion ou non), utilisez
trap foo EXIT
. La façon la plus pratique de le faire est de mettre votre code dans une fonction shell, par exemple:la source
~/.bash_logout
est uniquement géré par un shell de connexion (comme celui que vous obtenez sur les sessions tty ou avecbash -l
). Il est ignoré par les shells sans connexion, que la plupart des terminaux exécutent.Voir la page de manuel de bash (1), sous "INVOCATION", pour plus de détails.
Si vous ne souhaitez pas conserver l'historique persistant, désactivez
HISTFILE
-le ou définissez-leHISTFILE=/dev/null
. Cela supprimera automatiquement l'historique à la sortie, tout en permettant de le conserver pour le shell actuel (HISTSIZE=100
).la source