история-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
.
это сохранит вашу историю и файл истории без дубликатов на лету. Вы можете играть с сохранением истории в порядке ввода команд (подсказка: используйте номера строк в истории, сортируйте из определенной позиции начала строки и после удаления дубликатов снова сортируйте номера строк).