Дубликаты в истории bash

Для этого можно использовать Anacron, который предназначен для запуска заданий через определенные промежутки времени, не предполагая, что система включена постоянно. Если задание должно выполняться каждый месяц, Anacron проверит, выполнялось ли оно в предыдущем месяце, и запустит его, если нет (и запомнит, что не нужно запускать его снова в течение месяца).

В производных Debian, Anacron отлично работает с Cron, чтобы позаботиться о /etc/cron.{daily,weekly,monthly} соответствующим образом (так что вы просто определяете ваше ежемесячное задание как ежемесячное в /etc/cron.monthly, и оно будет запущено соответствующим образом).

На других системах вы определите ежемесячное задание в /etc/anacrontab.

3
06.03.2016, 01:43
1 ответ

Имеется два списка команд:

  • В память.
  • В файле.

Настройка для HISTCONTROL действует на список памяти. Этот список можно было увидеть командой historyбез опций. Если вы наберете команду, она будет добавлена ​​в список. Если добавляемая команда равна последней команде в списке и установлена ​​опция ignoredupsили опция erasedups, команда будет отброшена. В данном случае оба варианта имеют некоторое сходство.
Если установлена ​​опция erasedups, все предыдущие появления команды будут удалены из списка памяти (, но не из файла ).Это удаление произойдет только для новой повторной команды. То есть :повторяющихся команд будут оставаться до тех пор, пока в список не будет добавлена ​​новая команда.

Для записи списка памяти в файл есть команда history -w(, которая заменит весь файл новой копией ). Список в файле не будет обновляться, пока он не будет записан. Или добавлено с помощью history -a(, которое будет добавлять только новые строки, которые не были добавлены ранее, и может оставить старые повторяющиеся команды в файле ). При выходе из bash опция histappendбудет выбирать между заменой или добавлением к файлу. Добавление может оставить повторяющиеся команды нетронутыми.

Одним из способов очистки списка файлов (с сохранением последнего появления команды )является:

$ history | sort -urk2 | sort -n | sed 's/^ \+[0-9]\+ \+//'  >~/.bash_history

Одним из способов добавления каждой команды в файл является использование переменной bash команды prompt для выполнения history -wв каждой новой командной строке:

$ PROMPT_COMMAND='history -w'

Чтобы сделать это автоматически, все следующие команды должны быть добавлены к~/.bashrc(обычно в Linux )или~/.profile(обычно в Mac):

HISTFILE=${HISTFILE:-~/.bash_history}
HISTCONTROL=ignoreboth:erasedups
PROMPT_COMMAND='history -w'
nl "$HISTFILE"|sort -k2 -k 1,1nr|uniq -f1|sort -n|cut -f2- >"${HISTFILE}.temp" && mv "$HISTFILE"{.temp,}
history -c; history -r
1
27.01.2020, 21:22

Теги

Похожие вопросы