2009-04-29 19 views
15

Problem: zrozumieć następujący znacznik czasuNie można odczytać znacznik czasu historii zsh

1241036430 

w ~/.history

: 1241036336:0;vim ~/.zshrc 
: 1241036379:0;vim ~/bin/HideTopBar 
: 1241036421:0;ls 
: 1241036430:0;cat ~/.history 

kiedy mam

setopt EXTENDED_HISTORY 
HISTFILE=~/.history 

w .zshrc.

Jak można odczytać znacznik czasu?

+0

Jestem ciekawa, jaka jest druga liczba całkowita (wygląda na 0). Co oznacza ta liczba? –

Odpowiedz

1

Ten prosty util, zwany localtime jest złota do czytania plików znaczników czasu:

#!/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" 
} 

Obsługuje wiele przypadków i zdaje się rozumieć oba znaczniki czasu w sekundach i mini- sekundy, itp.

$ localtime < ~/.histfile 
<snip> 
: Sat Sep 17 05:55:17 2016:0;cat localtime 
+0

Czy możesz użyć tej funkcji dla innych plików historii, nie tylko Zsh? –

+0

Tak, zwykle po prostu działa. Po prostu szuka pierwszego ciągu cyfr i przekształca go w czytelną dla człowieka datę. – olejorgenb

18

Wypróbuj history -d. Lub wpisz history - i nacisnąć control-D, aby uzyskać wszystkie różne opcje:

% 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 
+0

Dziękuję za wyjaśnienia! –

+0

Nauczyłem się nowej rzeczy, że ctrl-D da wszystkie opcje. Dzięki Ci!! – Buchi

+2

Nie działa dla mnie, w jaki sposób mogę to zrobić w systemie OS X? – juanpastas

12

Można wyświetlić całą historię ze znaczników czasu czytelnych dla człowieka przy użyciu tego jednego-liner zaczerpnięty z an answer on the zsh mailing list:

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

Polecam wyprowadzenie wyjścia na pager (na przykład less), aby było bardziej czytelne.

+0

+1 za uznanie źródła ... :) –

2

Adendum: Można użyć samej komendy history przetłumaczyć znaczniki czasu znalezione w zapisanej historii plików, a także:

opcji, aby dowodzić history jak wyjaśnia Nicholas Riley zastosowanie równie dobrze do zapisanych plików historii, więc history -d < historyfile (lub jakakolwiek inna opcja) tłumaczy znaczniki czasu.

Przydaje się to, jeśli używasz więcej niż jednego pliku historii - skonfigurowałem zsh, aby zachować jeden plik historii na pty, aby uniknąć mieszania historii z powłok działających równolegle w tym samym systemie (ponieważ zazwyczaj każdy window/screen/... jest szczególny dla określonego zadania, a więc historie wyłaniające się z normalnego użytkowania kończą się rodzajem tematu).

+1

'history -d olejorgenb

Powiązane problemy