Ответы:
Если вы хотите выполнить команду, не сохраняя ее в истории, добавьте ее с дополнительным пробелом
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 -w
after history -d {num}
было именно тем, что мне было нужно - этот критический лакомый кусочек должен быть добавлен к ответу, иначе пользователь может подумать, что временное удаление из текущей оболочки на самом деле является постоянным.
history -w
необходим для записей, которые уже были записаны в .bash_history
файл. Как воспроизвести (например, на CentOS 7 со стандартной конфигурацией): 1. войдите 2. введите команду echo foo
3. выйдите из системы 4. снова войдите в систему 5. удалите запись для echo foo
6. выйдите из системы 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