Ответ 1
Вы задали два вопроса:
В чем разница между
history -a
иhistory -w
?
history -a
будет добавить текущую историю сеансов в содержимое файла истории.
history -w
будет заменить содержимое файла истории вашей текущей историей сеанса.
Какой из них позволяет избежать дублирования?
Теоретически. Ни -a
, ни -w
не проверяет наличие дубликатов. Практически -w
позволяет избежать дублирования, поскольку он заменяет содержимое файла истории. Любые потенциальные дубликаты записей в файле удаляются вместе с чем-либо еще в файле.
Подробнее о history
команде в руководстве bash.
Дополнительная информация о других возможностях убить дубликаты:
Специальная переменная bash HISTCONTROL=ignoredups
здесь не очень помогает, поскольку она устраняет только дубликаты, поскольку они вводятся в запущенную оболочку. Он не делает ничего, чтобы предотвратить существующие дубликаты в текущей истории или в файле истории. Кроме того, ignoredups
игнорирует команды, которые являются дубликатами предыдущей команды, а не если это дубликат любой команды ранее в истории.
К сожалению, даже многообещающий HISTCONTROL=erasedups
здесь не помогает. erasedups
стирает любую запись истории, соответствующую текущей введенной команде. К сожалению, он делает это только в текущей истории сессии. Он не ищет дубликаты в файле истории. Это также не помешает повторению дубликатов в истории сеансов при использовании history -n
.
Подробнее о специальной переменной HISTCONTROL
в руководстве bash.