Файл истории временных меток, вызывающий появление ошибочных строк в команде истории

Файл истории временных меток, вызывающий появление ошибочных строк в команде истории

У меня есть настройка .bash_profile для экспорта в файл истории:

export HISTFILE=/root/history/.bash_hist-$(who -m | awk '{print $1}')

Затем я экспортирую временные метки для команды истории.

export HISTTIMEFORMAT="%Y/%m/%d %T "

Эта комбинация привела к записи временных меток эпохи в файл истории:

#1463962023
top

Поэтому я написал на Perl одну строку в .bash_profile, чтобы записывать в файл только удобочитаемую временную метку, тем самым исключая строку эпохи: (и несколько других строк)

format_history () {
local file=/root/history/.bash_hist-$(who -m | awk '{print $1}')
perl -i -pe 's/^#(\d{10})$/"# ".localtime($1)/e' "$file"
}

shopt -s histappend
PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"

Теперь мой экспортированный файл выглядит так:

# Sun May 22 19:06:41 2016
last

Что замечательно и именно то, что мне нужно. Однако это имеет нежелательный побочный эффект в виде добавления выделенной строки в команду истории, которая не содержит ничего, кроме дат, которые там не должны быть.

 824  2016/05/22 19:07:33 # Sun May 22 19:06:41 2016
 825  2016/05/22 19:07:33 last

Как мне записать в файл то, что мне нужно, не заставляя команду history сообщать об этих нежелательных строках?

ПРИМЕЧАНИЕ. Эта аномалия с командой history, похоже, "активируется", когда я вхожу в систему. (Я использую ssh) Я могу быть в сеансе, выполнить 10 команд, затем выполнить команду history, и все выглядит нормально. Однако, как только я выхожу из системы, снова вхожу в систему и запускаю команду history, она отображает ошибочные строки.

ОБНОВЛЕНИЕ: Я сузил проблему до строки:

PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"

Когда я закомментирую эту строку, команда history работает так, как и ожидалось. Однако это была также команда, которая запустила форматирование файла истории. Я пробовал удалить часть "history -a" из строки, оставив остальное, но это не имеет никакого значения. Если бы я оставил всю строку закомментированной, как бы я мог вызвать форматирование файла с помощью скрипта perl?

решение1

Я бы оставил файл истории в покое и вместо этого реализовал бы запись команд в обработчике prompt_command. Я бы также заставил его писать в личный файл журнала, тогда у вас не будет конфликтов с другими использованиями файла истории или проблем с доступом других пользователей к /root

Связанный контент