Поэтому мне было интересно, как запускать эти две строки кода каждый раз, когда я закрываю открытый экземпляр Terminal:
history -c
cat /dev/null > ~/.bash_history
Я export HISTFILE=5
при запуске, но все еще хочу избавиться от этого, когда я закончу.
Я попытался немного осмотреться в нескольких местах , и мне не повезло .
Я запускаю Linux Mint, и здесь также отмечу, что столкнулся с аналогичной проблемой .bash_profile
; в конце концов я обнаружил, что мне нужно поместить весь стартовый код .bashrc
, так что, возможно, это как-то связано с этим. Вот мой .bash_logout
файл:
#!/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
Я пытался перестроить этот сценарий многими способами, я не уверен, что я не понимаю, как работает bash, и работает ли вообще что-то из этого. Тот факт, что я запускаю Xserver
make bash, рассматривает Terminal как выход из системы при выходе?
Это говорит о том, что я не вошел в систему, что имело бы смысл:
$> shopt login_shell
login_shell off
источник
echo
команду в начале, прежде чем она сделает что-либо еще, что может помешатьecho
запуску. Ошибка может привести к завершению работы сценария до его завершения.shopt login_shell
говорит?Ответы:
Предполагая, что вы убедились, что это оболочка входа в систему (
shopt login_shell
):~ / .bash_logout запускается только в том случае, если вы явно выходите из оболочки с помощью
exit
илиlogout
, или, нажимая Control-D, вводите конец файла в командной строке. Если вы закрываете эмулятор терминала, процессы отправляются SIGHUP, и bash в этом случае не запускает ~ / .bash_logout.Если вы хотите выполнять работу в любое время, когда выходит bash (и неважно, является ли это оболочкой входа в систему или нет), используйте
trap foo EXIT
. Наиболее удобный способ сделать это - поместить ваш код в функцию оболочки, например:источник
~/.bash_logout
запускается только оболочкой входа в систему (например, той, что вы получаете на сеансах tty или сbash -l
). Он игнорируется не входящими в систему оболочками, которые используются большинством терминалов.См. Страницу руководства bash (1) в разделе «ПРИЗНАНИЕ» для получения дополнительной информации.
Если вы не хотите сохранять постоянную историю, просто удалите
HISTFILE
или установитеHISTFILE=/dev/null
. Это автоматически удалит историю при выходе, но при этом сохранит ее для текущей оболочки (HISTSIZE=100
).источник