Щоб не зберегти жодну команду у своїй історії, просто передуйте її пробілом (позначеним ␣тут):
$ 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