Тимчасово призупинити bash_history на заданій оболонці?


115

Чи є спосіб тимчасово призупинити відстеження історії в bash, щоб увійти до свого роду "інкогніто"? Я ввожу в свій термінал речі, які не хочу записувати, чутливу фінансову інформацію.

Відповіді:


153

Це ви повинні шукати:

unset HISTFILE

З man bash

Якщо HISTFILE вимкнено або якщо файл історії непридатний, історія не зберігається.

Крім того, якщо ви хочете вимкнути його, а потім знову ввімкнути, використовувати його може бути простіше set:

Вимкнути

set +o history

Ввімкнути

set -o history

12
Значення HISTFILEперевіряється лише при виході bash, тому перший метод не працює таким, як є (якщо ви відновите значення, команда буде збережена). set +o historyпрацює за вказівкою.
Жиль

5
Дякую, чудово. Я буду використовувати set +o historyта set -o historyперемикатись туди-сюди, коли я роблю секретні речі;)
Naftuli Kay

1
unset HISTFILEне працює. set -/+o historyпрацює як шарм! спасибі
холофело Малома

4
Як підказка, якщо ви поставите пробіл перед командою (запустіть команду з пробілу), вона не буде записана у вашій історії, і клавіші зі стрілками вгору / вниз також не відображатимуться.
Махді

1
Це не спрацює в zsh btw
Shubham Chaudhary

33

Використовуючи bash, встановіть HISTCONTROL="ignorespace"і передуйте пробілу будь-яку команду, яку ви не хочете записати в історію. Якщо ви забули вжити будь-яких заходів, є також history -d <number>можливість видалити певний запис або history -cочистити всю історію команд.


27

Переконайтеся, що вона HISTCONTROLмістить ignorespace. Ви, ймовірно, захочете додати HISTCONTROL=ignorespace( HISTCONTROL=ignoredups:ignorespaceабо щось) до свого ~/.bashrc. Тоді будь-який командний рядок, який починається з пробілу, опускається з історії.

Інша можливість - почати новий сеанс bash, який не зберігає свою історію.

$ bash
$ unset HISTFILE
$ sooper-sekret-command
$ exit
$ #back in the parent shell

5

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

$ bash                        # open a new session.
$ unset HISTFILE              # avoid recording commands to file.
$ commands not recorded
.
.
$ exit
$

Існує чотири способи (рівні) для управління тим, як зберігаються команди.

  1. Перший і найпростіший - використовувати ignorespace(або ігнорувати):

    $ HISTCONTROL="ignorespace${HISTCONTROL:+:$HISTCONTROL}"

    Це дозволить використовувати пробіл перед командами, які ви хочете уникнути запису в список пам'яті history. І, як наслідок, оскільки в пам'яті немає записаної команди, яку можна було б надіслати у файл, також уникне відправлення однієї команди у файл, перелічений у $HISFILE.

  2. Уникайте запису команд у файл у $HISTFILE:

    $ unset HISTFILE

    Якщо не встановлено, історія команд не зберігається при виході оболонки.

    Недійсне HISTFILE=''та / або встановлене HISTFILE=/dev/nullдля того ж ефекту. Зрозумійте, що команди все ще записуються до списку пам'яті, спробуйте historyкоманду чи стрілку вгору.

    Попередження: якщо HISTFILE буде скинуто до існування оболонки, все, що було записано в пам'яті, все одно можна записати у файл.

  3. Уникайте запису нових команд до списку історії в пам'яті. І, як це не знаходиться в пам'яті, не можна записати у файл.

    $ shopt -ou history              # or set +o history

    Повторно ввімкнути shopt -os history(або set -o history)

  4. Видаліть усі команди із списку історії в пам'яті:

    $ HISTSIZE=0

    Усі команди стираються (з пам'яті), і, отже, нічого не можна зберегти у файл, звичайно, поки змінна не буде встановлена ​​знову на якесь дійсне числове значення.


//, Це охоплює всі відповіді, крім відповіді від @Ambrose на одній зручній сторінці. Шлях, @Isaac. Чи готові ви до цього додати посилання або два? Досить впевнений man history, що не збирається скоротити це для більшості з нас.
Натан Басанес

1
@NathanBasanese Розширено. Краще?
Ісаак

// , Так! Чи правильно я припускаю, що вони походять від змінних Bash і вбудованих вбудованих документів ?
Натан Басанес

//, Крім того , в той час як я читав змінні документації Bash , я натрапив HISTIGNORE, що subsumesфункція HISTCONTROL.
Натан Басанес

(Припустимо, що ви використовуєте Linux): Що станеться, якщо ви виконаєте команду LESS=+'/^ *HISTI' man bash(чи не це "сторінки вручну"?). @NathanBasanese
Ісаак

3

Існує один простий спосіб вимкнути історію, тому команди не зберігатимуться у .bash_historyфайлі.

Ви повинні поставити пробіл або пробіл перед будь-якою командою, щоб ця команда не зберігалася в історії. Наприклад:

$ ls 
print the list of file 
$ history 
ls
history

$  pwd
print the current  working directory 
$ history 
ls
history

pwdКоманда не отримає магазин в історії, тому що вона має прогалини в передній частині .


Це не працює; Баш скаржиться, що "-" або "-історія" або інші дефісні команди не можна знайти.
Самуель А. Фальво II

2
Ця робота не працює, якщо HISTCONTROL = "ігнорує простір" встановлено як відповідь forcefsck
DeveloperChris

1
export HISTFILE=/dev/null 

Це мій шлях. На випадок, якщо вимкнено HISTORY / HISTFILE / HISTCONTROL і т. Д. ... не працює, експорт його в / dev / null завжди працював на мене.


Для тимчасового призупинення історії? Це не працювало для мене як звичайна команда. Подальші команди входили в історію. Ви називаєте це у .bash_profile чи сценарії? GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
Мат Гессел
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.