Вопрос

Я пишу PROMPT_COMMAND="history -a;$PROMPT_COMMAND" Но я все еще получаю дубликаты из разных сеансов терминалов. Кажется, я все еще получу несколько дубликатов, но я меньше использую команду PROMPT_COMMAND="history -w;$PROMPT_COMMAND".

Я знаю, что могу сделать history -a;history -c; history -r Но я не хочу, чтобы они все синхронизировались. Я хочу, чтобы это произошло только тогда, когда я называю историю -н. Я в основном использую историю или историю -W, но я не могу найти разницу между ними. Который будет лучше избегать как можно большего количества дубликатов.

Это было полезно?

Решение

Вы задали два вопроса:

В чем разница между history -a а также history -w?

history -a будут добавлять Ваша текущая история сеанса для содержания файла истории.

history -w будут заменять Содержание файла истории с вашей текущей историей сеанса.

Какой из них избегает больше дубликатов?

Теоретически ни один. Ни один -a ни -w Проверки на дубликаты. Практически -w избегает больше дубликатов, потому что он заменяет содержание файла истории. Любые потенциальные дублируемые записи в файле устраняются, наряду со всем остальным в файле.

Узнайте больше о history командование в руководстве по Bash.


Некоторая дополнительная информация о других возможностях убить дубликатов:

Специальная переменная Bash HISTCONTROL=ignoredups Здесь не очень помогает, потому что это только устраняет дубликаты, поскольку они вводятся в бегущую оболочку. Он ничего не делает, чтобы предотвратить существующие дубликаты в текущей истории или в файле истории. более того ignoredups Только игнорирует команды, которые являются дубликатом предыдущей команды, а не в том случае, если это дубликат любой команды ранее в истории.

К сожалению, даже не очень многообещающе HISTCONTROL=erasedups Здесь очень помогает. erasedups Стирает любую историю, соответствующую введенной введенной команде. К сожалению, это делает это только в текущей истории сессии. Он не ищет дубликатов в файле истории. Это также не помешает дубликатам войти в вашу историю сеанса при использовании history -n.

Узнайте больше о Специальная переменная HISTCONTROL в руководстве по Bash.

Другие советы

Вы можете избежать дубликатов, используя это

export HISTCONTROL=ignoredups

Вы можете посмотреть на это для получения дополнительной информации:

http://stefaanlippens.net/bashduplicates

Используйте переменную 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.

Это сохранит ваш файл истории и истории без дубликатов на лету. Вы можете сыграть с поддержанием истории по порядку, команды были введены (подсказка: используйте номера строк в истории, сортируйте из определенной начальной позиции линии и после удаления дубликатов снова сортируют с номерами строк).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top