Мне нравится хранить много истории, поэтому я histappend
установил в моем .bashrc
. В большинстве случаев все работает нормально, история складывается из множества добавляемых оболочек. Тем не менее, время от времени я запускаю новую оболочку и обнаруживаю, что потерял всю историю - и она часто содержит только некоторые команды из последней оболочки для выхода (т.е. это не просто перезапись вместо добавления ), Из-за этого я подозреваю, что это происходит при выходе из оболочки, а не из-за какого-то другого процесса, убивающего .bash_history
файл. В поддержку этого вывода у меня в командной строке есть номера команд истории, и я никогда не видел, чтобы они прыгали вниз.
Кто-нибудь когда-нибудь сталкивался с подобной проблемой? Или даже просто есть предложения, как отследить проблему?
Ответы:
Извините, что отвечаю на мой вопрос, но ни один из других ответов на самом деле не решает проблему.
Я наконец-то понял, что это происходит только при закрытии
gnome-terminal
самого себя (т.е. file> exit, кнопка 'x', alt + F4) и даже тогда, как правило, только при закрытии нескольких терминалов в быстрой последовательности. Это никогда не происходит при использовании ctrl-D для закрытия оболочки, позволяя терминалу следовать.Если мне удастся это исправить, я отправлю отчет об ошибке в gnome-терминале. А пока, возможно, это поможет другим людям, которые попали сюда из Google!
источник
Не знаю, почему это происходит, но, возможно, вы можете обойти проблему, заставив bash записывать в свой файл истории каждый раз, когда он отображает приглашение:
Это будет записывать (-a) и затем перечитывать (-n) файл истории каждый раз, когда bash запрашивает следующую команду. Дополнительное преимущество: вы получите команду X в оболочке 1 в истории оболочки 2.
источник
history -n
облупленный Это надежнее сделатьhistory -a; history -c; history -r
. Чтобы объяснить это, я сначала отмечу, чтоhistory -a
это правильно: ваша команда.bash_history
будет содержать все введенные вами команды в том порядке, в котором вы их вводили, при условии, что вы запускаетеhistory -a
после каждой команды. Задача состоит в том, чтобы синхронизировать представление оболочки об истории с файлом .bash_history. Это легко,-c
и-r
проблема в том, что он может быть медленным, если он большой.-n
может сломаться, потому что он неправильно определяет, какие строки являются новыми. (У меня здесь-n
) Представьте , что вы выполняете команду в оболочке 1:ls
. Затем в другой оболочке, Shell Two, вы выполняетеcd
. Теперь история в .bash_history верна, потому чтоhistory -a
в вашемPROMPT_COMMAND
- она будет содержатьсяls \n cd \n
. Далее вы вернетесь в Shell One и наберетеpwd
. Shell One считает, что в истории была только команда n (ls
). Теперь он думает, что есть две команды (ls
иpwd
) в истории. Когда вы делаете-n
это, он думает (у меня есть две команды в моей истории, и в .bash_history есть две команды, поэтому я в курсеПо моему опыту, оболочки обновляли файл истории во время выхода. Таким образом, первоначальная «история» оболочки зависела от самого последнего взгляда на историю оболочки.
В результате вы можете получать и отправлять команды из истории в зависимости от того, как запускались и останавливались другие оболочки.
источник
histappend
. Проблема не в неожиданном контенте, а в полной потере ранее сохраненного контента.Я видел это раньше, но это была проблема с ошибками диска, которые происходили все чаще. Я бы запустил сканирование на диске. Если окажется, что с диском все в порядке, я бы проверил, не превышает ли этот файл произвольный предел истории оболочки.
Что-то, что могло бы предотвратить это, состояло бы в том, чтобы продолжать сокращать файл до 80 строк или скольких команд вы хотите, чтобы история была.
источник
int
bash и хранят их как.