Jak wyświetlić znacznik daty i godziny dla polecenia historii w powłoce Zsh

34

Kiedy uruchamiam polecenie history na moim serwerze ubuntu, otrzymuję dane wyjściowe w następujący sposób:

   history
   ...
   25  cd ~
   26  ls -a
   27  vim /etc/gitconfig
   28  vim ~/.gitconfig

Chcę wyświetlić datę i godzinę konkretnego użytkownika. Jednak kiedy je zakładam:

su otheruser
export HISTTIMEFORMAT='%F %T  '
history
...
25  cd ~
26  ls -a
27  vim /etc/gitconfig
28  vim ~/.gitconfig

Nadal nie wyświetla daty i godziny. Używam powłoki Zsh.

JohnMerlino
źródło

Odpowiedzi:

49

Wierzę, że HISTTIMEFORMAT jest przeznaczony dla pocisków Bash. Jeśli używasz, zshmożesz użyć tych przełączników do historypolecenia:

Przykłady

$ history -E
    1   2.12.2013 14:19  history -E

$ history -i
    1  2013-12-02 14:19  history -E

$ history -D
    1  0:00  history -E
    2  0:00  history -i

Jeśli to zrobisz man zshoptionslub man zshbuiltinsmożesz dowiedzieć się więcej informacji na temat tych przełączników, a także innych informacji związanych z history.

fragment strony podręcznika zshbuiltins

Also when listing,
  -d     prints timestamps for each command
  -f     prints full time-date stamps in the US `MM/DD/YY hh:mm' format
  -E     prints full time-date stamps in the European `dd.mm.yyyy hh:mm' format
  -i     prints full time-date stamps in ISO8601 `yyyy-mm-dd hh:mm' format
  -t fmt prints time and date stamps in the given format; fmt is formatted 
         with the strftime function with the  zsh extensions described for 
         the %D{string} prompt format in the section EXPANSION OF PROMPT 
         SEQUENCES in zshmisc(1).  The resulting formatted string must be no 
         more than 256 characters or will not be printed.
  -D     prints elapsed times; may be combined with one of the options above.

Debugowanie wywołania

Możesz użyć następujących 2 metod do debugowania zshpo jej wywołaniu.

Metoda nr 1

$ zsh -xv

Metoda nr 2

$ zsh
$ setopt XTRACE VERBOSE

W obu przypadkach powinieneś zobaczyć coś takiego po uruchomieniu:

$ zsh -xv
#
# /etc/zshenv is sourced on all invocations of the
# shell, unless the -f option is set.  It should
# contain commands to set the command search path,
# plus other important environment variables.
# .zshenv should not contain commands that produce
# output or assume the shell is attached to a tty.
#

#
# /etc/zshrc is sourced in interactive shells.  It
# should contain commands to set up aliases, functions,
# options, key bindings, etc.
#

## shell functions
...
...
unset -f pathmunge _src_etc_profile_d
+/etc/zshrc:49> unset -f pathmunge _src_etc_profile_d

# Created by newuser for 4.3.10
slm
źródło
6
"nie znaleziono zdarzenia: -i" "nie znaleziono zdarzenia: -E". Czy muszę załadować coś do pliku konfiguracyjnego przed uruchomieniem tych przełączników?
JohnMerlino,
1
Jakiej wersji zsh? zsh --version. Właśnie potwierdziłem na Ubuntu 12.10, że polecenia, które ci dałem, działały dobrze.
slm
17
@JohnMerlino Miałem zsh 4.3.10 (x86_64-unknown-linux-gnu) na serwerze, dla którego chciałem przeglądać historię ze znacznikami czasu. Po przejrzeniu strony podręcznika zshbuiltinsodkryłem, że muszę użyć fc. To, co w końcu dla mnie zadziałało, było fc -li. Możesz również przekazać numery poleceń fc, więc fc -li -100wyświetla 100 ostatnich poleceń w historii.
Thomas Upton,
21
Muszę użyć \history -E, używam oh-my-zsh
juanpastas
1
Jest to długotrwały (ponad 6 lat) błąd związany z och-my-zsh, zobacz ten problem na github: github.com/robbyrussell/oh-my-zsh/issues/739
rokoko
20

history -Elub history -icokolwiek, NIE działa dla mnie.

zsh --versionpokazuje to zsh 4.3.6 (x86_64-suse-linux-gnu).

To fc -li 100działa! Pokazuje 100 ostatnich poleceń ze znacznikiem czasu :)

Gab 是 好人
źródło
Dzięki, to zadziałało również dla mnie, w przeciwieństwie do najwyższej odpowiedzi. Moja wersja jest: zsh 5.1.1 (x86_64-ubuntu-linux-gnu). A skoro tu jestem: czy wiesz, jak uzyskać pomoc z polecenia fc? Ani praca, man fcani fc --helppraca
ekshuma
@exhuma czemu nie google :)
Gab 是 好人
@Gab 是 好人 Czy masz alias z historii? jeśli korzystasz oh-my-zshz polecenia historii, dodaj -lflagę w jednej z opcji. patrz github.com/robbyrussell/oh-my-zsh/blob/master/lib/…
Mike D
1
fc -lfpokaże pełny znacznik czasu. Zauważ, że działa to tylko na Zsh, a nie na bash.
dr01
@exhuma W Zsh możesz używać run-help fc.
xuhdev,
4

Jeśli używasz oh-my-zshdodatek w zsh, history -Elub history -inie będzie działać (bo to synonim fc -l 1).

Jak wskazał @juanpastas, spróbuj

\history -E

lub

\history -i

lub

fc -li 100

alpha_989
źródło
1
Właśnie dodałem: 'alias history = "fc -li 1"', aby przedefiniować alias historii w moim pliku ~ / .zshrc i teraz działa zgodnie z oczekiwaniami!
user886869
lub nawet lepiej: 'alias history = "history -i". W ten sposób możesz uruchomić to samo polecenie w aliasie, a jeśli chcesz dodać więcej klawiszy / opcji, nie jest to mylące.
Dr Beco