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