Пустая строка в моей баш.истории?

Я смотрел на мой .bash_historyи я нашел пустую строку. Я думал, что мог нажать "Ввод", пока просматривал файл.

Это нормально? Или, может быть, я действительно нажал Enter, когда просматривал файл на gedit?

РЕДАКТИРОВАТЬ: Только что обнаружил сегодня, что у меня более одного разрыва строки. Странно, я никогда не редактирую файл.bash_history.

3 ответа

Решение

Это не проблема, это не опасно и совершенно нормально. Вы можете получить такие строки, если вы несколько раз нажмете пробел, а затем нажмете Enter. Это будет сохранено в вашей истории (поскольку это непустая строка, пробелы - это символы, невидимые).

Чтобы проверить это, мы можем использовать команду, которая печатает пустые строки в истории bash. Например, это grep будет соответствовать всем строкам, которые начинаются с цифр, а затем имеют 0 или более пробелов (пробелы или табуляции или что-либо еще) и ничего больше до конца строки:

history | grep -P '^\s*\d+\s*$'

Это должно показать вам список пустых команд, которые вы выполнили. Теперь бегите (первая строка означает несколько раз пробить, затем введите)

$ echo foo
foo
$       
$ history  | tail -n 3
$ history | tail -n 3
80  echo foo
81               ## this is the blank line
82  history | tail -n 3

Вы заметите, что у вас есть новая пустая строка. В заключение не волнуйтесь. все хорошо и это нормально.

Как упомянул тердон, это, скорее всего, только пробельные строки.

Существуют две опции переменных среды, которые определяют, будут ли строки пробелов сохраняться в истории:

  • HISTCONTROL: если оно содержит ignorespace, тогда любая строка, начинающаяся с пробела, игнорируется.

  • HISTIGNORE: список разделенных двоеточиями списков игнорируемых. Например, если он содержит:

    HISTIGNORE=' *'
    

    тогда строки, начинающиеся с одного пробела, будут игнорироваться.

Я не смог заставить bash хранить действительно пустые строки без пробелов.

Вот объяснение того, как пустые строки могут появляться в .bash_history файл.

Вкратце:

Если вы вызываете из истории командную строку, которую вы на самом деле набрали ранее в том же текущем сеансе терминала, а затем редактируете ее (возможно, удаляете), но затем прерываете редактирование, оставляя эту (историю) командную строку, используя, например, Down стрелка, чтобы вернуться к подсказке текущей текущей командной строки, затем, когда вы позже выйдете из терминала, изменения будут записаны в файл.bash_history.

Другие вопросы по тегам