Невозможно прочитать временную метку истории Zsh.
Вопрос
Проблема: чтобы понять следующую временную метку
1241036430
в ~/.history
: 1241036336:0;vim ~/.zshrc
: 1241036379:0;vim ~/bin/HideTopBar
: 1241036421:0;ls
: 1241036430:0;cat ~/.history
когда у меня есть
setopt EXTENDED_HISTORY
HISTFILE=~/.history
в .zshrc.
Как можно прочитать временную метку?
Решение
Это просто использовать, называется localtime
золото для чтения файлов с метками времени:
#!/usr/bin/perl
# http://perl.plover.com/classes/mybin/samples/source/localtime
if ($ARGV[0] eq '-f') {
*show_localtime = \&show_localtime_list;
shift;
}
if (@ARGV) {
for (@ARGV) {
print show_localtime($_), "\n";
}
} else {
while (<>) {
s/^(\d+)/show_localtime($1)/e;
print;
}
}
sub show_localtime {
my $t = shift;
scalar localtime $t;
}
sub show_localtime_list {
my $t = shift;
my @a = localtime $t;
"@a\n"
}
- (есть еще немного презентация :))
Он обрабатывает множество случаев и, похоже, понимает как временные метки в секундах, так и в мини-секундах и т. д.
$ localtime < ~/.histfile
<snip>
: Sat Sep 17 05:55:17 2016:0;cat localtime
Другие советы
Пытаться history -d
.Или просто введите history -
и нажмите Control-D, чтобы получить все различные варианты:
% history -
-D -- print elapsed times
-E -- dd.mm.yyyy format time-stamps
-d -- print time-stamps
-f -- mm/dd/yyyy format time-stamps
-i -- yyyy-mm-dd format time-stamps
-m -- treat first argument as a pattern
-n -- suppress line numbers
-r -- reverse order of the commands
Вы можете отобразить всю историю с удобочитаемыми временными метками, используя эту однострочную строку, взятую из ответ в списке рассылки zsh:
perl -lne 'm#: (\d+):\d+;(.+)# && printf "%s :: %s\n",scalar localtime $1,$2' $HISTFILE
Я бы рекомендовал передать вывод на пейджер (less
например), чтобы сделать его более читабельным.
Дополнение:Вы можете использовать history
сама команда для перевода временных меток, найденных в сохраненных файлах истории:
Варианты history
команда, как объяснил Николас Райли, применима и к сохраненным файлам истории, поэтому history -d < historyfile
(или любой другой вариант) отлично переводит временные метки.
Это пригодится, если вы используете более одного файла истории — я настроил zsh
хранить один файл истории для каждого pty, чтобы избежать путаницы историй оболочек, работающих параллельно в одной системе (поскольку обычно каждое окно/экран/...зависит от определенной задачи, и поэтому истории, возникающие в результате обычного использования, становятся своего рода тематическими).
: 1241036430:0;cat ~/.history
‘: <beginning time>:<elapsed seconds>;<command>’.
расширенная история — экономит время в секундах.Начало времени начинается с эпохи.
источник: http://zsh.sourceforge.net/Doc/Release/Options.html#index-EXTENDEDHISTORY