Відповіді:
Якщо ви хочете запустити команду, не зберігаючи її в історії, додайте їй додаткове місце
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. знову увійти: запис все ще є. Залежно від того, як ви налаштовуєте історію баш, можливо, ви можете відтворити цю проблему іншими способами, тобто, якщо ви провокуєте писати історію перед виходом із системи.
Щоб очистити всю свою історію, використовуйте
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