Команда history
показывает все результаты, но мы можем отфильтровать, чтобы получить конкретную команду, используя history | grep searchingCommand
. Это действительно полезно.
Но проблема в том, что он показывает те команды, которые были введены с ошибкой опечатки или которые были неудачными. Тогда определение правильного действительно является болью. Я проверил эту ссылку: Выборочная история команд в терминале? , но это не было моим решением.
Так есть ли способ удалить те команды из истории, которые были неверны во время ввода или позже?
Я бы хотел добавить другой метод изменения (или удаления) записей истории, который я обнаружил довольно случайно, когда работал с bash:
Чтобы продемонстрировать это, начните с выполнения следующих трех команд в bash:
$ echo 1
1
$ echo 2
2
$ echo 3
3
Теперь вы можете снова выбрать эти команды, используя клавиши со стрелками или Ctrl kbd> + p kbd> и Ctrl kbd> + п KBD>.
Скажем, вы хотите изменить первые две команды. Перемещайтесь по истории, пока не появится echo 1
, и измените ее на echo 1 - changed
, но НЕ НАЖИМАЙТЕ ВВОД. Если вы теперь продвинетесь дальше в своей истории, эта линия останется в своем измененном состоянии, и вы сможете отойти от нее и вернуться к ней. Теперь перейдите к строке echo 2
и измените ее на echo 2 - changed
, снова не нажимайте ввод. Чтобы сохранить изменения в этих строках, выберите любую команду в истории, кроме этих двух, и нажмите Ctrl kbd> + c kbd>.
Конечно, вместо изменения записи истории, вы также можете удалить ее, что приведет к пустой строке в этой записи. Чтобы удалить строку, отображаемую в данный момент в приглашении, нажмите Ctrl kbd> + e kbd> (которая переходит к концу строки), а затем нажмите Ctrl kbd> + < kbd> u kbd> (который удаляет текст от начала строки до курсора).
Простейший способ:
Примечание :
[ 1121] Это изменяет только текущие команды сеанса. Если мы хотим изменить старые команды и сохранить изменения, нам нужно выполнить следующую команду перед закрытием терминала:
history -w
Используйте:
history -d OFFSET
, чтобы удалить запись истории со смещением OFFSET
даже до того, как она была добавлена в файл истории bash. Чтобы узнать правильный OFFSET
, вам нужно всего лишь запустить команду history
. Это число с начала строки, содержащей запись истории, которую вы хотите удалить.
И для сохранения изменений в истории используйте:
history -w
Подробнее см. В настоящего руководства .
Отредактируйте файл ~/.bash_history
и удалите один раз с опечатками
Например, введите следующую команду:
gedit ~/.bash_history
Отредактируйте что-нибудь, что вам нравится, и после этого сохраните файл и перезапустите терминал. Команда root:
sudo -i
inser your password
gedit ~/.bash_history
, если вы хотите удалить все history -c
, следует выполнить трюк
SYNTAX
history history [n] history -c history -d offset history [-anrw] [filename] history -ps arg
KEY
-c Очистить список истории. Это может быть объединено с другими вариантами для полной замены списка истории.
-d смещение Удалить запись истории при смещении позиции. Смещение должно быть указано так, как оно отображается при отображении истории.
-a Добавить новые строки истории (строки истории, введенные с начала текущего сеанса Bash) в файл истории.
-n Добавить строки истории, еще не прочитанные из файла истории, в текущий список истории. Это строки, добавленные в файл истории с начала текущего сеанса Bash.
-r Считать текущий файл истории и добавить его содержимое в список истории.
-w Запишите текущую историю в файл истории.
-p Выполнить подстановку истории по аргументам и отобразить результат на стандартном выводе, не сохраняя результаты в списке истории.
-s Аргументы добавляются в конец списка истории как одна запись.
blockquote>source :
Если Вы хотите сразу удалить его, формируют тот же терминал сначала, необходимо добавить следующее к ~/.bashrc файл.
PROMPT_COMMAND='history -a'
и перезапустите свой терминал.
Можно добавить, что это где угодно в .bashrc файле.I добавило как ниже наряду с другим связанным с историей материалом.
Обычно во время сессии удара выполняемые команды не записаны в .bash_history, пока сессия не завершается следовательно PROMPT_COMMAND='history -a'
вводит команду прямо здесь в .bash_history.
Теперь каждый раз, когда Вы делаете ошибку или ошибку в команде и хотите удалить ее, прямо здесь просто выполняют следующее
sed -i '$d' ~/.bash_history
и tada это было бы удалено.
Для создания этого более простым, можно исказить его к чему-то более более простому и использовать его такой как
alias rh ='sed -i '\''$d'\'' ~/.bash_history'
Так выполнение rh
удалит последнюю выполняемую команду из истории.
Вышеупомянутое является временным искажением, которое только длится сессию. Для создания этого постоянным или персистентным добавляют
alias rh = 'sed -i '\''$d'\'' ~/.bash_history'
к .bashrc
Примечание:
Не должно быть никакого пространства с обеих сторон =
Если Вы не Хотите Искажать затем, Вы могли бы также сделать следующее
Сделайте commad имя rh
и поместите его в /bin
каталог:
Откройтесь файл говорят rh
и вставка после кода, сохраните и закройтесь:
sed -i '$d' ~/.bash_history
Сделать rh
исполняемый файл и место это в /bin
каталог:
chmod +x rh sudo cp rh /bin
Теперь используйте rh
команда для удаления недавней команды из истории.
Если вы используете опцию «set -o vi» в bash (очень полезно для поиска с помощью клавиши Escape), вы можете выполнить поиск строки и удалить строку с помощью «dd» так же, как в VI».
для удаления нескольких строк (например, с 1974 по 1990, проверьте с помощью команды history
):
for i in `seq 1974 1990` ; do history -d 1974 ; done
обратите внимание, что номер строки для удаления всегда одинаков, так как вы удаляете эту строку постоянно и перейти к следующему.
У меня была ситуация, когда у меня были лишние записи в моей истории bash от Yubikey - может быть, 50 или около того, соответствующие 'ccccc .....'. В идеале мне нужен был способ удалить записи, соответствующие шаблону, что, я полагаю, вы могли бы сделать с помощью sed или чего-то еще, предполагая, что ваша история игнорирует пробелы.
В любом случае, я стал ленивым и закончил тем, что использовал vim, искал 'cccc' и использовал 'dd', перебирая каждый матч. Не заняло больше минуты.