история-A vs история-w в Баш
Я пишу PROMPT_COMMAND="history -a;$PROMPT_COMMAND" но я все еще получаю некоторые дубликаты из разных сеансов терминала. Кажется, я все равно получу некоторые дубликаты, но я получаю меньше, используя команду PROMPT_COMMAND="history -w;$PROMPT_COMMAND".
Я знаю, что могу сделать history -a;history -c; history -r но я не хочу, чтобы они все синхронизированы. Я только хочу, чтобы это произошло, когда я называю историю-n. Я в основном использую либо history-a, либо history-w, но я не могу найти разницу между ними. Какой из них лучше было бы избежать столько дубликатов, как вероятный.
3 ответов
вы задали два вопроса:
в чем разница между
history -aиhistory -w?
history -a будет добавить ваша текущая история сеанса к содержимому файла истории.
history -w будет заменить содержимое файла истории с текущей историей сеанса.
какой из них избегает больше дубликатов?
теоретически ни. Ни -a, ни -w проверяет наличие дубликатов. Практически -w позволяет избежать повторений, потому что он заменяет содержимое файла истории. Любые потенциальные дубликаты записей в файле устраняются вместе с чем-либо еще в файле.
подробнее о history команда в руководстве bash.
дополнительная информация о других возможностях убить дубликатов:
специальная переменная bash HISTCONTROL=ignoredups здесь это не очень помогает, потому что это устраняет только дубликаты, поскольку они вводятся в запущенную оболочку. Он ничего не делает, чтобы предотвратить существующие дубликаты в текущей истории или в файле истории. Более того!--9--> игнорирует только команды, которые являются дубликатом предыдущей команды, а не если это дубликат любой команды ранее в истории.
к сожалению, даже многообещающих HISTCONTROL=erasedups помогает здесь. erasedups стирает любую запись истории, соответствующую текущему вводить команды. К сожалению, это происходит только в истории текущей сессии. Он не выполняет поиск дубликатов в файле истории. Это также не помешает дубликатам вводить историю сеансов при использовании history -n.
подробнее о специальная переменная HISTCONTROL в руководстве bash.
вы можете избежать дублирования с помощью этого
export HISTCONTROL=ignoredups
вы можете посмотреть на этой дополнительная информация:
используйте переменную BASH PROMPT_COMMAND С history и с помощью sort и uniq команды:
$> export PROMPT_COMMAND="history -a && history -c && sort ~/.bash_history | uniq > ~/.bash_history_new && rm ~/.bash_history && mv ~/.bash_history_new ~/.bash_history && history -r"
С этим вам не нужно указывать shopt -s histappend и export HISTCONTROL=erasedups.
это сохранит вашу историю и файл истории без дубликатов на лету. Вы можете играть с сохранением истории в порядке ввода команд (подсказка: используйте номера строк в истории, сортируйте из определенной позиции начала строки и после удаления дубликатов снова сортируйте номера строк).