Ich finde, ich arbeite viel an einem Projekt in einem festgelegten Verzeichnis. Manchmal - ein paar Monate später - muss ich etwas an diesem Projekt wiederholen, aber ich kann mich nicht erinnern, was ich getan habe. Ich verwende mercurial oder git, um Änderungen an Dateien zu verfolgen, möchte mich aber daran erinnern können, welche Befehle ich in diesem Verzeichnis ausgegeben habe.
Das Durchsuchen meines Shell-Verlaufs ist nicht sehr informativ. Ich protokolliere bereits alles in meinen. * _-Verlaufsdateien, aber ich möchte eine Liste der Dinge, die ich in ~ / foo / bar getan habe, und nicht alle anderen (Millionen) Dinge, die ich in dieser Woche getan habe. Ich kann mich wahrscheinlich nicht einmal daran erinnern, in welchem Monat ich zuletzt an diesem bestimmten Projekt gearbeitet habe.
Hat jemand irgendwelche Ideen, wie eine Projektverzeichnis-Protokolldatei aller Shell-Befehle, die ich verwendet habe? Ich stelle mir einen Befehl vor wie:
Arbeit an meinem Projekt
... wodurch die Shell-Protokolldatei auf ~ / myproject / .history.log gesetzt, der vorherige Verlauf aus dieser Protokolldatei geladen und möglicherweise meine Eingabeaufforderung aktualisiert wird, um mir mitzuteilen, an welchem Verzeichnis ich arbeite (z. B. vcprompt, um die Version bereitzustellen) Kontrollinfo).
Gibt es da draußen so etwas?
Vielleicht interessiert Sie ein Plugin namens Verzeichnisverlauf für zsh, das ich geschrieben habe .
Schauen Sie hier: https://github.com/tymm/directory-history
Obwohl es nicht wirklich zu Ihrer Arbeit im myproject- Workflow passt, sollte es perfekt zu Ihren Anforderungen passen.
Es wird ein Verlauf erstellt, der Verzeichnisse enthält.
Wenn Sie Ihren Verlauf durchsuchen, erhalten Sie zuerst Befehle aus dem Verzeichnis, in dem Sie sich befinden.
Wenn für dieses Verzeichnis keine Befehle mehr vorhanden sind, wird auf einen globalen Verlauf zurückgegriffen und Befehle vorgeschlagen, die in anderen Verzeichnissen verwendet werden.
quelle
Wenn Sie etwas Einfaches wollen, können Sie Ihre
.history.log
Datei als solche haben:cat
Wenn Sie dann die Datei ausführen, werden die darin aufgeführten Befehle angezeigt.Sie können diese Befehle auch nach Konvention in Funktionen in separaten Dateien gruppieren:
Dies hat den zusätzlichen Vorteil, dass Sie sofort arbeiten und Ihre Umgebung nicht verschmutzen.
quelle
README.md
andere.md
Dateien pro Thema verwenden oder erstellen und in der Readme-Datei darauf verweisen. Das ist, wenn Sie eine markdown-freundliche Quellcodeverwaltungsoberfläche haben.Um eine lokale Verlaufsdatei für ein Verzeichnis abzurufen, habe ich meinem Befehl bash prompt die folgende Zeile hinzugefügt.
if [ -f .local_history ] ; then tail -1 $HISTFILE >> .local_history ; fi
Der Befehl
touch .local_history
in einem Verzeichnis gibt mir dann eine lokale Verlaufsdatei für alle in diesem Verzeichnis ausgeführten Befehle, ohne die Hauptverlaufsdatei zu verlieren. Ähnliches würde in zsh funktionieren, denke ich.quelle
Zumindest in Bash wird HISTFILE nur zu Beginn der Shell-Instanz konsultiert. Die Per-Dir-Idee funktioniert hier nicht, es sei denn, Ihr 'Workon'-Beispiel oben erstellt eine Shell-Instanz.
Vielleicht kannst du dir so etwas ansehen
Das Skript erstellt jedoch auch eine Unterschale.
Kurz gesagt, Sie benötigen wahrscheinlich unordentliche Ebenen von Unterschalen, damit dies funktioniert.
quelle
Ich habe in Produktionssoftwarehäusern gearbeitet, in denen wir nur neue Benutzer und Gruppen für verschiedene Funktionen erstellt haben. Neue Benutzerkonten speziell für das Konfigurationsmanagement oder Software-Builds mit unterschiedlichem Grad an Sichtbarkeit in andere verwandte Funktionsbereiche über Gruppenmitgliedschaft und ACL, und der von beispielsweise ausgeführte Befehlsverlauf
cmmgr
würde in gespeichert~cmmgr/.bash_history
,bldmgr
verwandte Wörter würden in~bldmgr/.bash_history
usw. gespeichert . Um sich anzumelden, muss ein Benutzer sein Anmeldeverzeichnis besitzen. Daher wurde ein Projektbereich insgesamt auf einer separaten Festplatte eingerichtet. Der Besitz des Dateierstellers hat gezeigt, welcher Funktionsbereich die Dateien im Projektbereich erstellt hat, für die der entsprechende.bash_history
geprüft werden kann.Der obige Ansatz bietet Ihnen jedoch nicht die gewünschte Granularität, sondern ein Skelett, mit dem ein Benutzer in Kombination mit der Gruppenmitgliedschaft Gruppen wechseln kann, mit
newgrp
denen effektiv eine neue Shell und Umgebung erstellt und dann eine verwendet wird von den Ansätzen in den anderen Antworten angegeben, um die effektive~/.bash_history
Datei zu ändern, wenn Hüte zu sagen wechseln ,cmmgr
so dass einnewgrp
verwalten kann, welche~/.bash_history
pro Ordner verwendet und gespeichert wird, wenn man die neue Gruppe über dennewgrp
Befehl betritt und verlässt . Auscheckenman newgrp
. In anderen Antworten auf diese Frage gibt es einige Ansatzpunkte in dieser Richtung. Diese sollten mit dem UNIX-Gruppenparadigma funktionieren - die meisten Schrauben und Muttern werden von den Shell-Start- und Exit-Routinen behandelt, die von der gesteuert werdennewgrp
Aufruf. Check outnewgrp -l
:quelle
Hier stelle ich zwei Varianten vor, die jedoch nur für die Z-Shell gelten .
Variante 1
Daran habe ich beim Lesen Ihres Fragentitels zuerst gedacht. Mit dieser Variante können Sie mit ALT+ zwischen zwei Verlaufsmodi wechseln h: Global oder lokal , wobei letzterer bei chdir automatisch zu einem Verlauf pro Verzeichnis wechselt . Der globale Verlauf sammelt alle ausgegebenen Befehle.
Demonstration
Das Skript (um aufgenommen zu werden
~/.zshrc
oder bezogen zu werden)Variante 2
Wenn Sie noch einmal darüber nachdenken, scheint die Per-Dir-Historie zu feinkörnig zu sein, und Sie beschreiben in Ihrem Fragetext auch eher eine Pro-Projekt-Historie. Also habe ich mir eine andere Variante mit einer Workon- Funktion ausgedacht , um zwischen Projekten zu wechseln. Jedes Projekt hat eine eigene Verlaufsdatei
~/.zsh_projhistory_[name]
.Demonstration
Das Skript (um aufgenommen zu werden
~/.zshrc
oder bezogen zu werden)quelle
Nachdem ich eine Weile in einem Bereich gearbeitet habe.
history> hist1.txt dann später history> hist2.txt
Manchmal verwende ich das Datum für den Dateinamen. history> hist20180727.txt
Auf diese Weise gibt es für jedes Verzeichnis einen aktuellen Befehlsverlauf.
quelle