Então, eu tenho me perguntado como executar essas duas linhas de código toda vez que fecho uma instância aberta do Terminal:
history -c
cat /dev/null > ~/.bash_history
Eu export HISTFILE=5
na inicialização, mas ainda quero liberar isso quando terminar.
Tentei procurar um pouco em alguns lugares e não tive muita sorte .
Eu executo o Linux Mint e também observaria aqui que tive um problema semelhante com .bash_profile
; finalmente, descobri que precisava inserir todo o código de inicialização .bashrc
, então talvez isso tenha algo a ver com isso. Aqui está o meu .bash_logout
arquivo:
#!/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
Eu tentei reorganizar esse script de várias maneiras, não tenho certeza se não entendo como o bash funciona e se algo está sendo executado em primeiro lugar. O fato de eu executar o Xserver
make bash considera o Terminal algo que não é um logout na saída?
Não é dizer que estou não logado, o que faria sentido:
$> shopt login_shell
login_shell off
fonte
echo
comando no início, antes de fazer qualquer outra coisa que possa interferir naecho
execução. Um erro pode causar a saída do script antes de chegar ao fim.shopt login_shell
diz?Respostas:
Supondo que você tenha verificado que é um shell de login (
shopt login_shell
):~ / .bash_logout só é executado se você sair explicitamente do shell com
exit
oulogout
, ou digitando Control-D para inserir um final de arquivo no prompt de comando. Se você fechar o emulador de terminal, os processos serão enviados SIGHUP e o bash não executará ~ / .bash_logout nesse caso.Se você deseja executar o trabalho a qualquer momento, o bash termina (e se é um shell de login ou não), use
trap foo EXIT
. A maneira mais conveniente de fazer isso é colocar seu código em uma função shell, por exemplo:fonte
~/.bash_logout
é executado apenas por um shell de login (como o que você recebe em tty sessões ou combash -l
). É ignorado por shells sem login, que a maioria dos terminais executa.Veja a página de manual do bash (1), em "INVOCATION", para mais detalhes.
Se você não deseja manter o histórico persistente, desative
HISTFILE
ou definaHISTFILE=/dev/null
. Isso descartará automaticamente o histórico na saída, enquanto ainda permite que ele seja mantido para o shell atual (HISTSIZE=100
).fonte