ИСТОРИЯ -A VS History -W в Bash
-
27-10-2019 - |
Вопрос
Я пишу 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
Вы можете посмотреть на это для получения дополнительной информации:
Используйте переменную 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
.
Это сохранит ваш файл истории и истории без дубликатов на лету. Вы можете сыграть с поддержанием истории по порядку, команды были введены (подсказка: используйте номера строк в истории, сортируйте из определенной начальной позиции линии и после удаления дубликатов снова сортируют с номерами строк).