2009-04-29 5 views
15

Problema: per comprendere il seguente timestampImpossibile leggere il timestamp della storia Zsh

1241036430 

a ~/.history

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

quando ho

setopt EXTENDED_HISTORY 
HISTFILE=~/.history 

in .zshrc.

Come si può leggere il timestamp?

+0

Sono curioso di sapere quale sia il secondo intero (sembra essere sempre 0). Cosa rappresenta questo numero? –

risposta

1

Questo semplice util, chiamato localtime è oro per la lettura di file con timestamp:

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

Gestisce molti casi e sembra comprendere sia i timestamp in secondi che i mini- secondi, ecc.

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

Puoi usare la funzione per altri file di cronologia, non solo per quello di Zsh? –

+0

Sì, di solito funziona. Cerca semplicemente la prima stringa di cifre e la converte in una data leggibile dall'uomo. – olejorgenb

18

Prova history -d. O semplicemente digitare history - e premere Control-D per ottenere tutte le varie opzioni:

% 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

Grazie per le spiegazioni! –

+0

Imparato una nuova cosa che ctrl-D darà tutte le opzioni. Grazie!! – Buchi

+2

Non funziona per me, come posso farlo in OS X? – juanpastas

12

È possibile visualizzare l'intera storia con timestamp leggibili usando questo one-liner preso da an answer on the zsh mailing list:

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

Raccomanderei di collegare l'output a un cercapersone (ad esempio less) per renderlo più leggibile.

+0

+1 per l'accreditamento della sorgente ... :) –

2

Adendum: È possibile utilizzare il comando history stesso di tradurre timestamp trovati nella storia salvataggio dei file così:

Le opzioni del comando history come spiegato da Nicholas Riley applicano altrettanto bene per i file di cronologia salvati, così history -d < historyfile (o una qualsiasi delle altre opzioni) traduce perfettamente i timestamp.

Questo è utile se si utilizza più di un solo file di cronologia: ho impostato zsh per mantenere un file di cronologia per pty per evitare di mescolare le cronologie da shell eseguite in parallelo sullo stesso sistema (poiché di solito ciascuna window/screen/... è specifico per un certo compito, e così le storie che emergono dall'uso normale finiscono per essere ordinate a tema).

+1

'history -d olejorgenb