Щоб не зберегти жодну команду у своїй історії, просто передуйте її пробілом (позначеним ␣
тут):
$ echo test
test
$ history | tail -n2
3431 echo test
3432 history | tail -n2
$ ␣echo test2
test2
$ history | tail -n2
3431 echo test
3432 history | tail -n2
Така поведінка встановлена у вашому ~/.bashrc
файлі, а саме в цьому рядку:
HISTCONTROL=ignoreboth
man bash
каже:
HISTCONTROL Розділений
двокрапкою список значень, що керують тим, як команди зберігаються у списку історії. Якщо список значень включає
простір ігнорування , рядки, які починаються із символу пробілу, не зберігаються у списку історії . Значення ігнорованих змушує рядки, що відповідають попередньому запису історії, не зберігаються. Значення
ignoreboth - це стенограма для простору ігнорування та ігнорування .
ignoredups
до речі, є причиною того, що history | tail -n2
з’являється лише один раз в історії у вищевказаному тесті.
Історія терміналу зберігається в оперативній пам'яті і передається вашій програмі, ~/.bash_history
як тільки ви закриєте термінал. Якщо ви хочете видалити певний запис зі свого, ~/.bash_history
ви можете зробити це за допомогою sed
:
# print every line…
sed '/^exit$/!d' .bash_history # … which is just “exit”
sed '/^history/!d' .bash_history # … beginning with “history”
sed '/>>log$/!d' .bash_history # … ending with “>>log”
sed '\_/path/_!d' .bash_history # … containing “/path/” anywhere
В останньому я змінив роздільник за замовчуванням /
на те, _
як він використовується всередині пошукового терміна, насправді це дорівнює sed -i '/\/path\//d' .bash_history
. Якщо команда виводить лише рядки, які ви хочете видалити, додайте -i
параметр та змініть !d
на, d
щоб виконати видалення:
# delete every line…
sed -i '/^exit$/d' .bash_history # … which is just “exit”
sed -i '/^history/d' .bash_history # … beginning with “history”
sed -i '/>>log$/d' .bash_history # … ending with “>>log”
sed -i '\_/path/_d' .bash_history # … containing “/path/” anywhere