Не удалось прочитать временную метку истории 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.

Как вы можете прочитать метку времени?

Ответ 1

Этот простой util, называемый 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

Ответ 2

Попробуйте 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

Ответ 3

Вы можете отобразить всю историю с человекоподобными метками времени, используя этот однострочный вкладыш, взятый из ответа в списке рассылки zsh:

perl -lne 'm#: (\d+):\d+;(.+)# && printf "%s :: %s\n",scalar localtime $1,$2' $HISTFILE

Я бы рекомендовал вывести вывод на пейджер (less, например), чтобы сделать его более читаемым.

Ответ 4

Adendum: вы можете использовать команду history для перевода временных меток, найденных в сохраненных файлах истории:

Параметры команды history, как объяснил Николас Райли, также применимы к сохраненным файлам истории, поэтому history -d < historyfile (или любой другой вариант) очень точно переводит метки времени.

Это пригодится, если вы используете больше, чем один файл истории. У меня setup zsh, чтобы сохранить один файл истории за один pty, чтобы не смешивать истории из shells, работающих параллельно в одной и той же системе (так как обычно каждое окно/экран/... особенно относится к определенной задаче, поэтому истории, возникающие из обычного использования, в конечном итоге напоминают тематику).

Ответ 6

Тебе действительно нужен псевдоним.

Добавьте эту строку в свой .zsh_aliases или в другое место, которое у вас есть для псевдонимов.

alias history='fc -il 1'

или другой параметр из команды fc. Проверьте с помощью man zshbuiltins


Отредактировано:

Еще лучше использовать ту же команду, поэтому это не смущает, если вы хотите добавить еще один ключ/опцию в конце. В этом случае я рекомендую:

alias history='history -i'