Команды следует
511 clear
512 history
513 history -d 505
514 history
515 history -d 507 510 513
516 history
517 history -d 509
518 history
519 history -d 511
520 history
Я могу удалить одну history -d 511
, но как удалить последние 10 команд и историю между 10 командами с помощью одной команды в оболочке?
Можем ли мы написать сценарий bash и выполнить его для удаления истории?
vi $HISTFILE
и удалите то, что хотите. Используйте,head -n -10
если вам нужно его автоматизировать.Ответы:
Вы пробовали редактировать файл истории напрямую:
источник
~/.viminfo
поэтому обязательно удалите и ее!.bash_history
могут быть перезаписаны тем, что хранится в памяти. Я нашел это решение полезным: superuser.com/a/384383/253543Мой ответ основан на предыдущих ответах, но с добавлением изменения последовательности, чтобы элементы истории удалялись от самых недавних до самых последних.
Получите текущую историю (отрегулируйте количество строк, которые вы хотите видеть):
Это дает мне что-то вроде
Выберите начальную и конечную позиции для элементов, которые вы хотите удалить. Я собираюсь удалить записи с 1006 по 1008.
Это сгенерирует
history -d
команды для 1006, затем 1007 станет 1006, а 1006 удаляется, затем 1008 (стало 1007) теперь 1006 и удаляется.Если бы я также хотел удалить команду удаления истории, это немного сложнее, потому что вам нужно знать текущую максимальную запись в истории.
Вы можете получить это (может быть лучший способ):
Собрав все вместе, вы можете использовать это для удаления диапазона, а также для удаления команды удаления истории:
Оберните все это в функцию, чтобы добавить к вашему
~/.bashrc
:Пример удаления команд 4, 5 и 6 (1049-1051) и сокрытия улик:
На самом деле вопрос заключался в том, чтобы удалить последние 10 команд из истории, поэтому, если вы хотите сэкономить немного усилий, вы можете использовать другую функцию для вызова
histdel
функции, которая выполняет вычисления за вас.Эта функция принимает 1 аргумент - количество удаляемых предыдущих элементов истории. Итак, чтобы удалить последние 10 команд из истории, просто используйте
histdeln 10
.источник
history | tail -1 | awk '{print $1}'
можно упростить доhistory 1 | awk '{print $1}'
-bash: tac: command not found
на Mac OSX, иначе это был бы лучший ответ.for h in $(seq 1006 1008); do history -d 1006; done
это работает в ubuntu 16.04for i in {1..10}; do history -d $(($HISTCMD-11)); done
источник
history -d 511
работает, как ожидалось, затемhistory -d 512
удаляет то, что было 513, и 512 остается в истории как команда 511. Надеюсь, что это имеет смысл ,$x
каждый раз через цикл, я удаляю$1
. Таким образом, он сначала удаляет 511, а 512 становится 511. Затем он снова удаляет 511 и так далее.for i in
...history -d $i
и получил результаты, описанные в моем комментарии выше. Используя $ 1, это абсолютно правильно, как указано в вашем исходном ответе.С Bash 5 теперь вы можете делать диапазон ... Ура !:
или считая назад 10:
Выдержка из страницы руководства Bash 5 :
Вот мое решение для Bash 4. Он итеративно удаляет одну запись или диапазон истории, начиная с самого низкого индекса.
источник
Сначала введите:
history
и запишите последовательность номеров строк, которые вы хотите удалить.Чтобы очистить строки, скажем, с 1800 по 1815, напишите в терминале следующее:
Если вы хотите удалить историю для команды удаления, добавьте +1 для 1815 = 1816 и история для этой последовательности + команда удаления будет удалена.
Например :
источник
$line
удаляет все остальные строки, а затем превышает желаемый диапазон.Объединяя ответы сверху:
history -w vi ~/.bash_history history -r
источник
редактировать:
Поменял фигурные итераторы, хороший звонок. Также вызовите эту функцию с помощью обратного итератора.
Вероятно, вы можете сделать что-то вроде этого:
Где вы будете так вызывать:
Обратите внимание, что я не вставил никаких ошибок для проверки границ. Я оставлю это читателю в качестве упражнения.
см. также этот вопрос
источник
seq 563 514
ничего не напечатает. Вам нужноseq 563 -1 514
. В качестве альтернативы вы можете просто использоватьhistory -d $1
аргументы как514 563
Может кому будет полезно.
Когда вы входите в систему с любым пользователем любой консоли / терминала, история вашего текущего сеанса существует только в некотором «буфере», который сбрасывается в ~ / .bash_history при вашем выходе из системы.
Итак, чтобы сохранить все в секрете, вы можете просто:
history -r && exit
и вы выйдете из системы с очищенной (и только) историей вашего сеанса;)
источник
Я использовал комбинацию решений, представленных в этом потоке, чтобы стереть след в истории команд. Во-первых, я проверил, где хранится история команд:
Я редактировал историю с помощью:
После этого я очищаю буфер истории текущего сеанса с помощью:
В следующий раз, когда вы войдете в этот сеанс, последняя команда, которую вы увидите в истории команд, будет последней, которую вы оставили в pathToFile .
источник
history -c очистит все истории.
источник
чтобы удалить последние 10 записей (на основе вашего примера):
источник
Я использую этот скрипт для удаления последних 10 команд в истории:
Он использует переменную
$HISTCMD
среды для получения индекса истории и использует его для удаления последних 10 записей вhistory
.источник
Попробуйте следующее:
источник
for i in {511..520}; do history -d $i; echo "history -d 511"; done
Я использую это (у меня bash 4):
В
builtin history
части, а также последний-w
, потому что у меня есть на месте вариации знаменитых трюков в историю акций через терминалы и эта функция сломается без этих частей. Они обеспечивают вызов на настоящую тусовкуhistory
встроенной функции (а не моей собственной оболочки вокруг нее) и запись истории в HISTFILE сразу после удаления записей.Однако это будет работать так же, как и с «нормальными» конфигурациями истории.
Вы должны вызвать его с количеством последних записей, которые вы хотите удалить, например:
Удаляю последние 10 записей.
источник
Грубый, но функциональный
источник
Если вы хотите удалить 10 строк, просто измените значение N на 10.
источник
Простая функция может убить всех по номеру (хотя и не допускает ошибок)
источник
Коротко, но мило:
for i in {1..10}; do history -d $(($HISTCMD-11)); done
источник