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