Как мне изменить историю терминала Mac OS X?

12

Как мне отредактировать мою историю Bash в Mac OS X? Я ввел пароль в это окно по ошибке и не хочу удалять всю свою историю.

Картик С
источник

Ответы:

14

Редактирование - .bash_historyэто просто открытие файла с помощью редактора. Есть несколько способов добиться этого.

  1. В Терминале просто введите vi ~/.bash_history, затем отредактируйте файл, как хотите, и сохраните. Этот вариант может быть сложным, если вы, конечно, не привыкли к vi .
  2. Сделайте файл видимым , следуя этим инструкциям, например, откройте его как любой другой файл, измените его и сохраните.
  3. В Терминале просто введите open ~/.bash_history -a /Applications/TextEdit.app. Эта команда откроет файл с помощью TextEdit , вы можете выбрать любой другой текстовый редактор, конечно. Измените файл и сохраните.

Чтобы изменения были заметны, просто перезапустите bash.

Thecafremo
источник
Я получаю "разрешение отказано". Когда я делаю sudo, я не могу видеть все введенные команды.
Картик С
1
@ KartickS Ты получаешь что делаешь, что именно?
Thecafremo
Если я смотрю на содержимое .bash_history, содержимое отличается от вывода команды истории. Я узнаю оба, содержимое файла старше. Что произойдет, если открыто несколько командных окон? Похоже, они не имеют одинаковую историю команд. PS Я проверял, что я использую bash.
Виктор Энгель
1
Я думаю, что нашел свой ответ. ECHO $ ​​HISTFILE показывает тот, который нужно редактировать.
Виктор Энгель
10

В терминале наберите historyи запишите номер строки. Следующий вызов history -d noted-line-number. Вы можете проверить, что линия удалена, используя historyснова.

Unnamed_1
источник
2
Это не работает на Yosemite с ZSH.
Пауло Оливейра
Вопрос был о баш, а не зш. Внимательно прочитайте!
Безымянный_1
1
@DmitryDupelov Вы правы, извините, что беспокою. В любом случае, это напоминание будущим читателям (которые могут упустить и эту деталь). Спасибо за исправление моего комментария.
Пауло Оливейра
2
nano ~/.bash_history

когда вы закончите, ctrl+x и вернитесь, чтобы принять правильный ответ, чувак

Matian2040
источник
0

Я думаю, что ответ Дмитрия идеален, если сделать его перед сохранением истории - по умолчанию сохранение происходит при выходе из оболочки / терминала.

Если вы, возможно, уже сохранили историю в ~ / .bash_history, тогда я предпочитаю ответ Thecafremo, но я бы предложил добавить шаг выхода из терминала, чтобы убедиться, что ни один из экземпляров bash не загрузил историю и не сохранит ее заново. Это особенно сложно, если у вас есть несколько терминалов и вы включили любой вид обновления истории команд за командой.

Фон:

  • Bash сохраняет историю в экземпляре оболочки
  • bash может записать эту историю в файл, что обычно происходит при выходе из оболочки / терминала
  • Bash может читать из файла в историю, что обычно происходит при открытии оболочки / терминала
  • можно изменить поведение по умолчанию, чтобы история распространялась быстрее, что может перенести ваш BAD_TEXT в файл и в другие окна

Независимо от того, какой метод вы используете, я бы добавил один шаг: проверить успешность!

  1. Выход из Terminal.app
  2. Снова откройте Terminal.app
  3. Подтвердите, что оскорбительный текст отсутствует в истории - желательно таким образом, чтобы не создавать дополнительную историю. То есть нет grep BAD_TEXT .bash_history! Эта новая команда войдет в историю. Я бы просто открыл .bash_history в вашем любимом редакторе и стал бы искать там BAD_TEXT.

Это должно дать вам уверенность в том, что вы удалили BAD_TEXT независимо от того, с какой сумасшедшей настройкой bash вы можете столкнуться.

шалфей
источник