Uważam, że dużo pracuję nad projektem w ustalonym katalogu. Czasami - kilka miesięcy później - muszę coś powtórzyć w tym projekcie, ale nie pamiętam, co zrobiłem. Używam mercurial lub git do śledzenia zmian w plikach, ale chcę mieć możliwość zapamiętania poleceń wydanych w tym katalogu.
Przeszukiwanie mojej historii powłoki nie jest zbyt pouczające. Wszystko już loguję do moich plików historii. * _, Ale chcę listę rzeczy, które zrobiłem w ~ / foo / bar, a nie wszystkich innych (milionów) rzeczy, które zrobiłem w tym tygodniu. Prawdopodobnie nie pamiętam nawet, w którym miesiącu ostatnio pracowałem nad tym konkretnym projektem.
Czy ktoś ma jakieś pomysły, jak plik dziennika katalogu projektu wszystkich poleceń powłoki, których użyłem? Przewiduję polecenie takie jak:
mój projekt
... który ustawiłby plik dziennika powłoki na ~ / myproject / .history.log, załadował poprzednią historię z tego pliku dziennika i może zaktualizował mój monit, aby powiedzieć mi, w którym katalogu pracuję (np. vcprompt, aby zapewnić wersję informacje kontrolne).
Czy jest coś takiego?
Być może zainteresuje Cię napisana przeze mnie wtyczka o nazwie katalog-historia dla zsh.
Zajrzyj tutaj: https://github.com/tymm/directory-history
Chociaż tak naprawdę nie pasuje do twojego przepływu pracy w moim projekcie , powinien idealnie pasować do twoich potrzeb.
Tworzy historię zawierającą katalogi.
Podczas przeszukiwania historii najpierw otrzymujesz polecenia z katalogu, w którym się znajdujesz.
Jeśli dla tego katalogu nie ma żadnych poleceń, wróci do historii globalnej i zasugeruje polecenia używane w innych katalogach.
źródło
Jeśli chcesz czegoś prostego, możesz mieć swój
.history.log
plik jako taki:Następnie uruchomienie pliku sprawi,
cat
że zostaną w nim wymienione polecenia.Możesz również pogrupować te polecenia w osobne pliki według funkcji jako konwencji:
Ma to tę dodatkową zaletę, że działa od razu i nie zanieczyszcza środowiska.
źródło
README.md
lub utworzyć inne.md
pliki na temat i wskazać je z pliku readme. Dzieje się tak, jeśli masz przyjazny dla źródła interfejs kontroli źródła.Aby uzyskać lokalny plik historii dla katalogu, dodałem następujący wiersz do polecenia bash.
if [ -f .local_history ] ; then tail -1 $HISTFILE >> .local_history ; fi
Polecenie
touch .local_history
w katalogu daje mi lokalny plik historii dla wszystkich poleceń wykonanych w tym katalogu, bez utraty głównego pliku historii. Coś podobnego działałoby w Zsh.źródło
Przynajmniej w bash HISTFILE jest sprawdzany tylko na początku instancji powłoki. Idea per-dir tutaj nie zadziała, chyba że powyższy przykład „workon” tworzy instancję powłoki.
Może możesz spojrzeć na coś takiego
Ale skrypt tworzy również podpowłokę.
Krótko mówiąc, prawdopodobnie potrzebujesz bałaganu na poziomie podpowłoki, aby to zadziałało.
źródło
Pracowałem w domach oprogramowania produkcyjnego, w których tworzyliśmy nowych użytkowników i grupy dla różnych funkcji. Nowe konta użytkowników specjalnie do zarządzania konfiguracją lub kompilacji oprogramowania o różnym poziomie widoczności do innych powiązanych obszarów funkcjonalnych poprzez członkostwo w grupie i ACL, a historia poleceń wykonywana przez powiedzmy,
cmmgr
zostanie zapisana~cmmgr/.bash_history
,bldmgr
powiązane słowo zostanie zapisane~bldmgr/.bash_history
itp. Niestety, aby się zalogować, użytkownik musi posiadać własny katalog logowania. Dlatego obszar projektu został utworzony na osobnym dysku. Własność twórcy plików pokazała, który obszar funkcjonalny utworzył pliki w obszarze projektu, dla którego.bash_history
można sprawdzić odpowiedni.Powyższe podejście nie zapewnia jednak pożądanej szczegółowości, ale daje szkielet, który w połączeniu z członkostwem w grupie, użytkownik może przełączać grupy, w
newgrp
których skutecznie tworzy nową powłokę i środowisko, a następnie użyć jednego podejść podanych w innych odpowiedziach, aby zmienić~/.bash_history
plik efektywny przy zmianie kapeluszy, aby powiedzieć,cmmgr
abynewgrp
mógł zarządzać, który~/.bash_history
jest używany i zapisywany w folderze, gdy ktoś wchodzi i wychodzi z nowej grupy za pomocąnewgrp
polecenia. Sprawdźman newgrp
. Istnieje kilka punktów początkowych wzdłuż tych linii w innych odpowiedziach na to pytanie. Powinny one współpracować z paradygmatem grupy UNIX - większość nakrętek i śrub jest obsługiwana przez procedury uruchamiania i wychodzenia powłoki, kontrolowane przeznewgrp
wezwanie. Sprawdźnewgrp -l
:źródło
Tutaj przedstawiam dwa warianty, ale dotyczą tylko Z Shell .
Wariant 1
Właśnie o tym pomyślałem, czytając tytuł pytania. W tym wariancie możesz przełączać się między dwoma trybami historii za pomocą ALT+ h: Globalny lub lokalny , przy czym ten drugi automatycznie przełącza się na historię poszczególnych katalogów po chdir . Historia globalna gromadzi wszystkie wydane polecenia.
Demonstracja
Skrypt (do włączenia
~/.zshrc
lub uzyskania)Wariant 2
Zastanawiając się nad tym ponownie, wydaje się, że historia poszczególnych projektów jest zbyt drobnoziarnista, a w tekście pytań bardziej szczegółowo opisujesz historię poszczególnych projektów. Więc wymyśliłem inny wariant z funkcją workon do przełączania między projektami. Każdy projekt ma swój własny plik historii
~/.zsh_projhistory_[name]
.Demonstracja
Skrypt (do włączenia
~/.zshrc
lub uzyskania)źródło
Po pewnym czasie pracy w jednym obszarze.
historia> hist1.txt, a następnie historia> hist2.txt
Czasami używam daty dla nazwy pliku. historia> hist20180727.txt
W ten sposób dla każdego katalogu dostępna jest najnowsza historia poleceń.
źródło