Як закрити термінал, не зберігаючи історію?


33

Не раз я випадково запускав ряд команд і забруднював свою історію баш. Як закрити свій термінал, не зберігаючи історію баш? Я використовую Fedora.

Відповіді:


25

Історія вашої оболонки зберігається у файлі, вказаному HISTFILEзмінною. Так:

unset HISTFILE

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


Я можу це використати перед тим, як вийти із системи після забруднення історії? і що це для цієї сесії? мені не потрібно, щоб set HISTFILEнаступного разу ввійти? (просто скажіть, чи це правильно чи неправильно)

@ acidzombie24 Правильно, зміни змінних оточуючих середовищ не зберігаються протягом сеансів, якщо ви явно не зберігаєте зміни, наприклад, у файлах rc.
jw013

31

Коротка відповідь:

Введіть це у підказці:

$ 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

2
+1 для методу "вбити -9 $$". Це, безумовно, один із способів навколо ситуацій, коли HISTIGNORE тощо встановлюються лише для читання.
Корі Хендерсон

7
Я не думаю, що це гарна ідея сприяти використанню kill -9для чого-небудь, крім жахливих ситуацій, коли все інше не вдалося.
Крістофер Хаммарстрем

1
Надіслати SIGKILL ніколи не є хорошою ідеєю, як стандартною операційною процедурою. Використовуйте належні процедури, як-от зняття HISTFILE.
Арседж

@Arcege TMTOWTDI.
амфетамахін

Я хотів знати навпаки - на жаль, як вбити баша, переконавшись, що це збереже його історію - і це відповіло на моє запитання, дякую.
mveroone

3

Я здивований, бачу, що ніхто не запропонував history -cбезпосередньо до цього exit. IINM (я не експерт), що буде добре.


2
Ви на правильному шляху: history -rперечитаєте файл історії, тож збереження стає неоперативним.
Саймон Ріхтер

Промивання історії - погана звичка ... Історія оболонок містить багато корисної інформації про те, хто що робив. це дуже корисно для новачків на ваших платформах (якщо ви не впевнені на 100% у вашій документації, управлінні змінами)
Franklin Piat

2

Є дві змінні середовища, які bash використовує для визначення файлу історії та скільки рядків для запису до нього, коли оболонка виходить.

Ви можете викинути історію сеансу за допомогою будь-якого з них (встановити під час сеансу, який ви хочете опустити з вашого файлу історії):

HISTFILE=/dev/null

або

HISTSIZE=0

Будь-яка з цих функцій чудово працює в Bash на Fedora


1

Не впевнений, чому ти так дбаєш про історію своєї команди. Якщо вам потрібні певні команди часто, вам може бути веселіше, якщо ви визначите для них псевдоніми, щоб ви могли повернути їх двома натисканнями клавіш, а не шукати їх в історії.


0
  1. Елі вже дав тобі правильну відповідь на Bash, який потрібно встановити HISTSIZE=0.

  2. Я б просто додати метод зробити це для екрану GNU . Натисніть Ctrl+A(послідовність виходу з екрана), а потім - :scrollback 0. Це видалить історію прокрутки. Тепер ви можете негайно зробити :scrollback 15000скидання розміру буфера прокрутки.


Коли в ОП сказали, що використовують screen(1)?
амфетамахін

Він цього не зробив. Але ви можете запустити Bash всередині сеансу на екрані, і HISTSIZE = 0 все одно залишить дані про вашу активність у буфері прокрутки екрану. Отже, якщо ви дійсно хочете, щоб це було чистим, ви також повинні зробити scrollback=0це.
gsbabil

Буфер прокрутки очищається, коли вікно закривається (тобто, коли оболонка виходить). А як бути, якщо ви ввели Ctrl-a H? Чи це вб’є логфайл?
амфетамахін

@amphetamachine: ні, це лише розпочнеться / закінчиться реєстрацію поточного вікна. Сусідні Ctrl+a Hі Ctrl+a :clearне видалять історію. Вам потрібно Ctrl+a :scrollback 0. Ви можете перевірити це самостійно. Почніть новий сеанс екрана Тепер зробіть cat /etc/passwd. Тепер зробіть будь-що з перерахованого вище - Ctrl+a Hабо Ctrl+a :clear. Тепер спробуйте скопіювати з буфера екрана доніг, а Ctrl+a [потім стрілку вгору, щоб перейти вгору і побачити, як далеко ви можете піти на копіювання. Якщо ви зробили Ctrl+a :scrollbackнаступний a clear, ви б пішли лише далеко, як ви можете бачити в поточному вікні, оскільки не буде жодного буфера прокрутки.
gsbabil
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.