Я регулярно запускаю несколько screen
сеансов на своих рабочих столах и серверах Linux.
Проблема в том, что когда я grep
просматриваю историю команд, я обнаружил, что выполнил команду в другом сеансе, и мне нужно отсоединить и повторно присоединить, чтобы получить этот элемент истории.
Можно ли «принудительно» изменить по-разному обновленные истории из нескольких сеансов во все истории?
Ответы:
Есть две вещи, которые вам нужно сделать:
shopt -s histappend
в свой.bashrc
. Это добавит к файлу истории вместо того, чтобы перезаписать его..bashrc
insertPROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n"
и history будет перезаписываться и перечитываться каждый раз, когда bash показывает подсказку.РЕДАКТИРОВАТЬ: Спасибо e-t172 за
history -n
трюкисточник
PROMPT_COMMAND
определил ранее, поэтому мне пришлось использовать,PROMPT_COMMAND="history -a; history -n"
чтобы избежать ошибок.Пожалуйста, не используйте
history -a; history -n
, он не работает так, как вы ожидаете, и у вас останется много дублирующих, неупорядоченных команд в вашей истории. Решение, которое работает в целом, как и ожидалось, следующее:Использование новой строки вместо точки с запятой также является коротким способом решения проблемы отсутствия / дублирования точки с запятой в PROMPT_COMMAND.
источник
export
не обязательно. Поскольку предполагается, что устанавливаются параметры интерактивной оболочки, из~/.bashrc
которых вызывается каждая вложенная оболочка, поэтому наследование не требуется.PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
вместо этого?PROMPT_COMMAND не определен по умолчанию в некоторых дистрибутивах. Например, это определено в Arch, но не в Debian.
У меня есть bashrc в моем Dropbox, который я использую во время скачки дистрибутива, и он включает в себя:
источник
PROMPT_COMMAND="$PROMPT_COMMAND; history -a; history -n"
PROMPT_COMMAND="$PROMPT_COMMAND"$'\n''history -a; history -n'