Historia poleceń w Zsh

61

W jaki sposób Zsh śledzi historię poleceń?

W moim katalogu domowym widzę dwa pliki: .zhistoryi .zsh_history. Jaka jest różnica między nimi? Pliki wydają się zawierać całą moją historię. Czy Zsh ciągle dodaje linie do jednego z nich na zawsze ? Czy nie spowodowałoby to zbyt wolnego wyszukiwania historii?

Czy mogę bezpiecznie utworzyć te pliki symbolicznymi linkami do innej lokalizacji? (np. repozytorium git do śledzenia zmian w historii)

Amelio Vazquez-Reina
źródło
Sprawdź swoje ~/.zshrci / lub /etc/zshrcopcje tam opisane zsh.sourceforge.net/Guide/zshguide02.html#l17
UVV

Odpowiedzi:

78

Zsh przechowuje linie wejściowe (ewentualnie z informacją o czasie) w pliku wskazanym przez zmienną HISTFILE. Powinna to być bezwzględna nazwa pliku (w przeciwnym razie zostanie zinterpretowana w stosunku do bieżącego katalogu).

Zsh nie ma wbudowanej wartości domyślnej dla HISTFILE. Dystrybucja zsh zawiera kreatora konfiguracji dla nowych użytkowników, który ma ~/.histfilewbudowaną wartość , więc domyślnie otrzymują to użytkownicy zsh. Oh-my-zsh ma HISTFILE=.zhistorypreset. Wygląda na to, że wypróbowałeś Zsh zarówno z domyślną konfiguracją, jak iz Oh-My-Zsh. Sprawdź .zshrcdatę (lub datę pliku), aby zobaczyć, której aktualnie używasz.

To, jak zsh otwiera plik, a co za tym idzie, jeśli jest to dowiązanie symboliczne, zależy od kilku opcji.

  • Jeśli jedna z opcji append_history(ustawiona domyślnie) inc_append_historylub share_historyjest ustawiona, lub gdy historia jest zapisana jawnie za pomocą fc -AI, zsh dołącza się do istniejącego pliku.
    Zauważ, że nawet przy tych ustawieniach, zsh czasami zastępuje plik, jak opisano poniżej, aby przyciąć go do rozmiaru.
  • W przeciwnym razie, jeśli opcja hist_save_by_copyjest ustawiona (jest ustawiona domyślnie od zsh 5.0, ale nie istnieje w 4.2), zsh zapisuje plik tymczasowy, a po zakończeniu przenosi go na miejsce. W takim przypadku, jeśli plik historii był dowiązaniem symbolicznym, nowy plik zastępuje dowiązanie symboliczne.
  • W przeciwnym razie zsh zastępuje istniejący plik na miejscu.

Zamiast wskazywać zsh na dowiązanie symboliczne, ustaw HISTFILEgdziekolwiek chcesz, aby plik historii był.

Ile linii historii jest przechowywanych jest konfigurowane za pomocą zmiennych HISTSIZEi SAVEHIST. HISTSIZEto maksymalna liczba linii przechowywanych w sesji i SAVEHISTmaksymalna liczba linii przechowywanych w pliku historii.

Aby w ogóle zapisać trochę historii, musisz ustawić jedno HISTFILEi drugie SAVEHIST, ponieważ domyślna wartość SAVEHISTto 0. Możesz również zwiększyć wartość HISTSIZE(od zsh 5.0 domyślna wartość to tylko 30).

Gilles
źródło