Не удалось прочитать временную метку истории 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, работающих параллельно в одной и той же системе (так как обычно каждое окно/экран/... особенно относится к определенной задаче, поэтому истории, возникающие из обычного использования, в конечном итоге напоминают тематику).
Ответ 5
: 1241036430:0;cat ~/.history
‘: <beginning time>:<elapsed seconds>;<command>’.
extendedhistory - экономит время в секундах. Время начала с эпохи.
источник: http://zsh.sourceforge.net/Doc/Release/Options.html#index-EXTENDEDHISTORY
Ответ 6
Тебе действительно нужен псевдоним.
Добавьте эту строку в свой .zsh_aliases
или в другое место, которое у вас есть для псевдонимов.
alias history='fc -il 1'
или другой параметр из команды fc
. Проверьте с помощью man zshbuiltins
Отредактировано:
Еще лучше использовать ту же команду, поэтому это не смущает, если вы хотите добавить еще один ключ/опцию в конце. В этом случае я рекомендую:
alias history='history -i'