Объясните, почему .bash_logout не запускает команды?

Поэтому мне было интересно, как запускать эти две строки кода каждый раз, когда я закрываю открытый экземпляр терминала:

history -c cat /dev/null > ~/.bash_history 

Я export HISTFILE=5 при запуске, но все равно хочу export HISTFILE=5 , когда закончите.

  • Вызов функции bash не работает, как следует изменить на недавний каталог?
  • Переменные среды в bash_profile или bashrc?
  • Я попытался немного оглядеться в нескольких местах , и мне не повезло .

    Я запускаю 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 сделать bash рассмотрением терминалов что-то, что не является выходом при выходе?

    Он говорит, что я не вошел в систему, и это имело бы смысл:

     $> shopt login_shell login_shell off 

  • «Ошибка загрузки» Сообщение при загрузке с USB-устройства в ноутбуке
  • Ошибка № 5: Ошибка ввода / вывода при установке Linux
  • Как автоматически устанавливать обновления в linux mint 17.1
  • Сохранение быстрого запуска для Windows 8 в среде двойной загрузки Win / Linux?
  • Как получить список идентификаторов процессов в системе в командной строке linux?
  • Увеличение размера виртуального диска
  • 2 Solutions collect form web for “Объясните, почему .bash_logout не запускает команды?”

    Предполагая, что вы подтвердили, что это оболочка для входа ( shopt login_shell ):

    ~ / .bash_logout запускается только в том случае, если вы явно выходите из оболочки с exit или exit logout или набрав Control-D для ввода конца файла в командной строке. Если вы закроете эмулятор терминала, процессы отправляются SIGHUP, а bash в этом случае не запускает ~ / .bash_logout.

    Если вы хотите выполнять работу в любое время, когда выходите из bash (и является ли это оболочкой входа или нет), используйте trap foo EXIT . Самый удобный способ сделать это – поместить ваш код в функцию оболочки, например:

     print_goodbye () { echo Goodbye; } trap print_goodbye EXIT 

    ~/.bash_logout запускается только с помощью оболочки входа (например, той, которую вы получаете на сеансах tty, или с помощью bash -l ). Он игнорируется не-login-оболочками, которые запускаются большинством терминалов.

    Более подробную информацию см. На странице руководства bash (1) в разделе «INVOCATION».


    Если вы не хотите сохранять постоянную историю, просто HISTFILE или установите HISTFILE=/dev/null . Это автоматически отменит историю при выходе, сохраняя при этом ее текущую оболочку ( HISTSIZE=100 ).

    Давайте будем гением компьютера.