Сохранение истории bash из нескольких Konsole не работает правильно

Я использую несколько терминалов Konsole. И я хочу, чтобы все команды, которые я вводил в каждом терминале, были сохранены в истории команд, так что следующая консоль i open будет иметь все из них. Чтобы не допустить, чтобы каждый терминал переписывал историю команд другого терминала, я дал следующие настройки в моем .bashrc

 # avoid duplicates and commands starting with space export HISTCONTROL=ignoredups:erasedups:ignorespace # append history entries.. shopt -s histappend #My machine reboots without warning sometimes.Hence to save commands instantaneously. export PROMPT_COMMAND="history -a" export HISTSIZE=1000 PS1="\[\e[1;34m\]\! \[\e[0m\]"$PS1 

Я дал последней строке, чтобы увидеть номер команды в моей подсказке. Команда №. никогда не превышал 600, но все же некоторые из моих старых команд исчезают из истории. Существует много команд, которые задаются несколько раз, но, как и ожидалось из ignoredups , он никогда не увеличивает команду no в подсказке. Тем не менее старые команды все еще исчезают. И количество команд в истории всегда остается чуть более 500.

Файл .bash_history прежнему содержит много дубликатов, несмотря на игнорирование.

PS: Выход эха $HISTSIZE и $HISTFILESIZE равны =1000


Обновление: я нашел проблему в приведенной выше записи в .bashrc . Просто вызывая history -a в PROMPT_COMMAND просто добавляет последнюю новую команду в .bash_history. Таким образом, ignoredups и erasedups не влияют.

Есть ли способ, я все еще могу писать в .bash_history без дубликатов из каждого терминала? Я не хочу загружать всю историю в каждую командную строку из history -r и снова записывать ее с history -w , потому что команды, которые я выдал на одном терминале, также отображаются в другом параллельном рабочем терминале. Я хочу, чтобы комбинированные команды отображались только в новом терминале.

Головоломка, почему моя история обрезается до 500, решена. Я заметил, что это случалось каждый раз, когда я попадал в эту машину. Создание .bash_profile со следующей записью разрешило эту проблему.

 if [ -f ~/.bashrc ]; then . ~/.bashrc fi 

Теперь мой .bashrc выполняется каждый раз, когда я тоже ssh. И размер файла истории теперь монотонно увеличивается.

  • Как остановить bash заменять команды в истории звездочками? ( '*')
  • Можно ли перенести историю команд из одной системы в другую?
  • Есть ли способ отменить модификацию истории bash?
  • Обратный поиск Bash через вкладки терминала
  • Как остановить историю добавления Bash
  • Почему я могу изменить историю bash?
  • как сохранить команду в истории bash, не выполняя ее программно?
  • Использовать предыдущий «путь» в команде
  • 2 Solutions collect form web for “Сохранение истории bash из нескольких Konsole не работает правильно”

    Я пришел к выводу, что невозможно добавить новые команды напрямую и в то же время удалить любые дубликаты. Поэтому мое решение состоит в том, чтобы запустить следующие команды в то время. или положить его в мой кронтаб.

     tac $HOME/.bash_history | awk '!seen[$0]++' | tac > $HOME/.hist_Temp mv $HOME/.hist_Temp $HOME/.bash_history 

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

    Это уродливо, и я уверен, что sed или awk будет лучше, но я попытался решить ту же проблему, добавив это в свой .bashrc :

     export HISTFILE=.bash_history_`tty | python -c 'import sys ; sys.stdout.write(sys.stdin.read().strip().replace("/", "_"))'` 

    Это создаст отдельный файл истории для каждого открытого вами терминала, однако если вы запустите bash в bash, он будет использовать ту же историю, но не должен перезаписываться. Я предоставлю вам предостережение от моего опыта. Хотя это и работает, и эта история не перезаписывается, вы должны grep несколько файлов, чтобы попытаться найти историю, которую вы ищете, что иногда может занять много времени.

    Linux и Unix - лучшая ОС в мире.