Как я закрываю терминал, не сохраняя историю?

Я нашел способ использовать сценарий оболочки здесь помещенный cat как фоновый процесс и некоторое время цикл, которые читают ввод данных пользователем и echo это к порту. Я изменил его, чтобы быть более общим, и это соответствовало моей цели отлично.

#!/bin/sh

# connect.sh

# Usage:
# $ connect.sh  
# Example: connect.sh /dev/ttyS0 9600

# Set up device
stty -F $1 $2

# Let cat read the device $1 in the background
cat $1 &

# Capture PID of background process so it is possible to terminate it when done
bgPid=$!

# Read commands from user, send them to device $1
while read cmd
do
   echo "$cmd" 
done > $1

# Terminate background read process
kill $bgPid

33
21.11.2011, 04:09
6 ответов

История Вашей оболочки сохраняется в файле, обозначенном HISTFILE переменная. Так:

unset HISTFILE

Это также относится к zsh, но не к ksh, который продолжает сохранять в файл, обозначенный $HISTFILE когда оболочка запускается (и с другой стороны, Вы решаете сохранить свою историю в ksh, после того как Вы запустили оболочку).

25
27.01.2020, 19:37
  • 1
    я могу использовать это, прежде чем я выйду из системы после того, как я загрязнил историю? и его ust для этой сессии? я не должен set HISTFILE в следующий раз я вхожу в систему? (просто скажите, корректно ли это или неправильно), –   21.11.2011, 02:51
  • 2
    @acidzombie24, Который корректен, изменения в переменных среды не сохраняются через сессии, если Вы не храните изменения явно, например, в емкостно-резистивных файлах. –  jw013 21.11.2011, 03:44

Короткий ответ:

Введите это при подсказке:

$ kill -9 $$

Это уничтожит Вашу оболочку сразу же без способности оболочки сделать что-либо, такое как прерывание сигнал, сохранить историю, выполниться ~/.bash_logout, предупредите об остановленных заданиях или любом том хорошем материале.

Длинный ответ:

Примечание: Эти опции не являются взаимоисключающими; они могут все использоваться сразу.

Опция 1:

Если Вы - перфекционист когда дело доходит до загромождения Вашего файла истории, то то, что можно сделать, изменяют HISTIGNORE переменная для включения шариков команд Вы не хотите зарегистрированный. Например, если Вы добавляете HISTIGNORE='ls*:cd*' к Вашему ~/.bashrc затем любой экземпляр ls и cd не вставляются в Ваш файл истории.

Опция 2:

Если Вы хотите управлять на основе команды командой, какие команды упущены из Вашей истории, можно установить HISTCONTROL='ignorespace' который опустит любые командные строки, запускающиеся с пространства. Используя ignoreboth также опустит повторенные строки. Затем удар клавиши "Пробел" перед вводом команды, заставит ее не обнаруживаться в файле истории.

Опция 3:

Если Вы просто хотите сделать его поэтому при закрытии терминала, оболочка сразу выходит, Вы можете trap сигнал терминальная программа отправляет оболочку (xterm, например, отправляет SIGHUP затем ожидает оболочки для выхода), и сделайте выход, не сохраняя историю, когда это получает этот сигнал. Добавьте это к Вашему ~/.bashrc:

# don't record history when the window is closed
trap 'unset HISTFILE; exit' SIGHUP
31
27.01.2020, 19:37
  • 1
    +1 для 'уничтожает' метод за-9$$. Это - конечно, один путь вокруг ситуаций, где HISTIGNORE, и т.д. установлены как только для чтения. –  Corey Henderson 21.11.2011, 07:28
  • 2
    я не думаю, что это - хорошая идея способствовать использованию kill -9 для чего-либо кроме страшных ситуаций, когда все остальное перестало работать. –  Christoffer Hammarström 21.11.2011, 18:51
  • 3
    Отправка SIGKILL никогда хорошая идея как стандартная рабочая процедура. Используйте надлежащие процедуры, как сбрасывание HISTFILE. –  Arcege 22.11.2011, 01:26
  • 4
    @Arcege TMTOWTDI. –  amphetamachine 22.11.2011, 05:16
  • 5
    я хотел знать противоположное - увы, как уничтожить удар, удостоверившись, что это сохранит его историю - и это ответило на мой вопрос, спасибо. –  mveroone 22.01.2016, 11:18

Я удивлен видеть, что никто не предложил history -c сразу до exit. IINM (я не эксперт), который сделает приятно.

3
27.01.2020, 19:37
  • 1
    Вы на правильном пути: history -r перечитает файл истории, таким образом сохранение становится нет. –  Simon Richter 21.11.2011, 11:47
  • 2
    Flushing история является дурной привычкой..., окружает историю, содержит большую полезную информацию о том, кто сделал что. это очень полезно для людей, которые являются новыми на Ваших платформах (если Вы не на 100% уверены в Вас документация, управление изменениями), –  Franklin Piat 14.09.2015, 16:53

Существует две переменные среды, которые колотят использование для определения файла истории и сколько строк для записи в него, когда оболочка выходит.

Можно выбросить историю сессии с любым из них (набор во время сессии, которую Вы хотите опустить из своего файла истории):

HISTFILE=/dev/null

или

HISTSIZE=0

Любой из них хорошо работает в Bash на Fedora

2
27.01.2020, 19:37

Не уверенный, почему Вы заботитесь о своей истории команд так. При необходимости в определенных командах часто Вы могли бы развлечься еще больше при определении псевдонимов для них так, можно вернуть их с двумя нажатиями клавиш вместо того, чтобы иметь необходимость искать их в истории.

1
27.01.2020, 19:37
  1. Eli уже дал Вам корректный ответ для Bash, который должен установить HISTSIZE=0.

  2. Я просто добавил бы метод, чтобы сделать это для экрана GNU.Пресса Ctrl+A (экранируйте escape-последовательность), сопровождаемый :scrollback 0. Это удалит историю прокрутки назад. Теперь можно сразу сделать :scrollback 15000 сбрасывать размер буфера прокрутки назад.

0
27.01.2020, 19:37
  • 1
    Когда сделал OP, говорят, что они использовали screen(1)? –  amphetamachine 21.11.2011, 04:47
  • 2
    Он не сделал. Но, Вы могли выполнять Bash в экранной сессии, и HISTSIZE=0 все еще оставит Ваши детали действия в буфере прокрутки назад экрана. Так, если Вы действительно хотите это чистый, необходимо сделать scrollback=0 также. –  gsbabil 21.11.2011, 05:37
  • 3
    Буфер scrollback очищен, когда окно закрывается (т.е. когда оболочка выходит). Что относительно того, если Вы ввели Ctrl-a H? Это уничтожит файл журнала? –  amphetamachine 21.11.2011, 09:23
  • 4
    @amphetamachine: нет, это только начнет/закончит регистрироваться текущего окна. Neighther Ctrl+a H ни Ctrl+a :clear удалит историю. Вам нужно Ctrl+a :scrollback 0. Можно протестировать его сами. Запустите новую экранную сессию. Теперь сделайте a cat /etc/passwd. Теперь, сделайте любое вышеупомянутое - Ctrl+a H или Ctrl+a :clear. Теперь, попытайтесь копировать с экранного буфера путем выполнения a Ctrl+a [ сопровождаемый стрелкой вниз, чтобы повыситься и видеть, как далеко можно перейти к копии. Если Вы сделали a Ctrl+a :scrollback сопровождаемый a clear, Вы только пошли бы насколько Вы видите в текущем окне с тех пор там привычка быть любым буфером scrollback. –  gsbabil 21.11.2011, 14:15

Теги

Похожие вопросы