Чтобы не сохранять ни одной команды в вашей истории, просто поставьте перед ней пробел (отмеченный ␣
здесь):
$ 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
Список значений, разделенных двоеточиями, управляющий тем, как команды сохраняются в списке истории. Если в списке значений есть
пробел игнорирования , строки, начинающиеся с пробела, не сохраняются в списке истории . Значение ignoredups приводит к тому, что строки, соответствующие предыдущей записи истории, не сохраняются. Значение
ignoreboth является сокращением для ignorespace и ignoredups .
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