Ответы:
Если вы хотите выполнить команду, не сохраняя ее в истории, добавьте ее с дополнительным пробелом
prompt$ echo saved
prompt$ echo not saved \
> # ^ extra space
Чтобы это работало, вам нужно либо в, ignorespaceлибо ignorebothв HISTCONTROL. Например, запустить
HISTCONTROL=ignorespace
Чтобы сделать этот параметр постоянным, поместите его в свой .bashrc.
Если вы уже выполнили команду и хотите удалить ее из истории, сначала используйте
history
отобразить список команд в вашей истории. Найдите номер рядом с тем, который вы хотите удалить (например, 1234), и запустите
history -d 1234
Кроме того, если строка, которую вы хотите удалить, уже записана в ваш $ HISTFILE (что обычно происходит, когда вы завершаете сеанс по умолчанию), вам нужно будет выполнить обратную запись в $ HISTFILE, или эта строка появится снова, когда вы откроете новую сессия:
history -w
history -aв этом случае, в этом случае он уже записан в файл истории, а не при выходе при нормальной конфигурации. В частности: mywiki.wooledge.org/BashFAQ/088
history -w. В противном случае при выходе удаленная строка все еще там!
history -wafter history -d {num}было именно тем, что мне было нужно - этот критический лакомый кусочек должен быть добавлен к ответу, иначе пользователь может подумать, что временное удаление из текущей оболочки на самом деле является постоянным.
history -wнеобходим для записей, которые уже были записаны в .bash_historyфайл. Как воспроизвести (например, на CentOS 7 со стандартной конфигурацией): 1. войдите 2. введите команду echo foo3. выйдите из системы 4. снова войдите в систему 5. удалите запись для echo foo6. выйдите из системы 7. снова войдите в систему: запись все еще там. В зависимости от того, как вы конфигурируете свою историю Bash, возможно, вы можете воспроизвести эту проблему другими способами - например, если вы провоцируете запись истории перед выходом из системы.
Чтобы очистить всю свою историю, используйте
history -cЧтобы удалить одну строку, используйте
history -d linenumberУ меня есть это в моем ~/.bashrc, что делает команду $ forgetудалить предыдущую команду из истории
function forget() {
history -d $(expr $(history | tail -n 1 | grep -oP '^ \d+') - 1);
}
history -d $( history | tail -n 1 | cut -f 1 -d " " )будет проще?
history | tail -n1является самой historyкомандой, поэтому удаление этого номера приводит к неправильной записи. Тем не менее, history -d $( history | awk 'END{print $1-1}' )объединяет выбор линии, выбор поля и вычитание.
Если вы хотите забыть весь сеанс bash, вы можете killиспользовать текущий процесс bash. Поскольку переменная $$содержит pidтекущую оболочку, вы можете сделать:
kill -9 $$
Вам нужно написать изменения после того, как вы очистили историю. И если вы не хотите, чтобы в вашей истории была команда стереть историю, вам нужно выполнить такую команду:
history -c && history -w && logout
Удачи.
Adding another point suppose if you want to delete a range of history lines
You can use below script.
Below example will delete history output from line 1 to line 150.
for i in `history | awk 'NR > 1 && NR <=150{print $1}'`; do history -d $i; done