Во-первых, некоторые фона:Perl один лайнер для преобразования эпохи в человеческой читаемый затем удалить эпохи
Мы используем код в нашем .bash_profile, который присоединяет метку времени к команде истории.
export HISTTIMEFORMAT="%d/%m/%Y %T "
Тогда мы также есть код, который присоединяет нашу историю команд в определенном месте в/корень/история/
export HISTFILE=/root/history/.bash_hist-$(who -m | awk '{print $1}')
«Экспорт HISTTIMEFORMAT» команда добавит эпохальное метку времени файла в/корень/история /.
Теперь магия происходит, когда мы используем однострочный perl для преобразования эпохи в человекообразную. (Это, кстати, тоже в .bash_profile)
format_history() {
perl -i -e '$/=undef;my $string=<>;$string=~s/#([0-9] {10}.*\n.*$)/"# ".localtime($1)."#\n#$1"/ge;print $string;' /root/history/.bash_hist-$(who -m | awk '{print $1}')
}
shopt -s histappend
PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"
Конечный результат представляет собой файл, который содержит такие строки для каждой команды:
# Wed Apr 27 10:11:26 2016
#1461769886
vi /root/.bash_profile
Я искал способ, чтобы иметь PERL удалить временная метка эпохи после ее преобразования, но до сих пор не увенчалась успехом. Я попытался использовать sed в конце строки и другую команду perl. Как это:
Первая попытка:
perl -i -e '$/=undef;my $string=<>;$string=~s/#([0-9]{10}.*\n.*$)/"# ".localtime($1)."#\n#$1"/ge;print $string;' /root/history/.bash_hist-$(who -m | awk '{print $1}' | sed '/^#1/ d'
Вторая попытка:
perl -i -e '$/=undef;my $string=<>;$string=~s/#([0-9]{10}.*\n.*$)/"# ".localtime($1)."#\n#$1"/ge;print $string;' /root/history/.bash_hist-$(who -m | awk '{print $1}' | perl -i -nle 'print if !/^#1\b' /root/history/.bash_hist-$(who -m | awk '{print $1}'
Но, как я уже говорил, что они не работают. Может ли кто-нибудь помочь мне найти решение?