Je trouve que je fais beaucoup de travail sur un projet dans un répertoire défini. Parfois - quelques mois plus tard - j'ai besoin de refaire quelque chose sur ce projet mais je ne me souviens pas de ce que j'ai fait. J'utilise mercurial ou git pour suivre les modifications apportées aux fichiers, mais je veux pouvoir me souvenir des commandes que j'ai émises dans ce répertoire.
La recherche dans mon historique de shell n'est pas très informative. J'ai déjà tout enregistré dans mes fichiers d'historique. * _, Mais je veux une liste des choses que j'ai faites dans ~ / foo / bar, et pas toutes les autres (millions) choses que j'ai faites cette semaine. Je ne me souviens probablement pas du mois où j'ai travaillé pour la dernière fois sur ce projet particulier.
Quelqu'un at-il des idées sur la façon dont un fichier journal de répertoire de projet de toutes les commandes shell que j'ai utilisées? J'imagine une commande comme:
workon myproject
... qui définirait le fichier journal du shell sur ~ / monprojet / .history.log, chargerait l'historique précédent à partir de ce fichier journal, et peut-être mettrait à jour mon invite pour me dire sur quel répertoire je travaille (comme par exemple vcprompt pour fournir la version informations de contrôle).
Y a-t-il quelque chose comme ça?
Vous pourriez être intéressé par un plugin que j'ai écrit appelé directory-history for zsh.
Regardez ici: https://github.com/tymm/directory-history
Bien qu'il ne corresponde pas vraiment à votre travail sur le flux de travail myproject , il devrait parfaitement correspondre à vos besoins.
Il crée un historique qui comprend des répertoires.
Lorsque vous recherchez dans votre historique, vous obtiendrez d'abord les commandes du répertoire dans
lequel vous vous trouvez. S'il n'y a plus de commandes pour ce répertoire, il reviendra à un historique global et suggérera des commandes utilisées dans d'autres répertoires.
la source
Si vous voulez quelque chose de simple, vous pouvez avoir votre
.history.log
fichier en tant que tel:Ensuite, l'exécution du fichier correspondrait
cat
aux commandes que vous y avez répertoriées.Vous pouvez également regrouper ces commandes dans des fichiers séparés par fonctionnalité comme convention:
Cela a l'avantage supplémentaire de travailler hors de la boîte et de ne pas polluer votre environnement.
la source
README.md
ou créer d'autres.md
fichiers par sujet et les pointer vers le fichier Lisez-moi. C'est si vous avez une interface de contrôle de source conviviale pour le démarquage.Pour obtenir un fichier d'historique local pour un répertoire, j'ai ajouté la ligne suivante à ma commande d'invite bash.
if [ -f .local_history ] ; then tail -1 $HISTFILE >> .local_history ; fi
La commande
touch .local_history
dans un répertoire me donne alors un fichier d'historique local pour toutes les commandes exécutées dans ce répertoire, sans perdre le fichier d'historique principal. Quelque chose de similaire fonctionnerait dans zsh, je suppose.la source
En bash au moins, HISTFILE n'est consulté qu'au début de l'instance de shell. L'idée par répertoire ne fonctionnera pas ici, à moins que votre exemple 'workon' ci-dessus ne crée une instance de shell.
Peut-être que vous pouvez regarder quelque chose comme
Mais le script crée également un sous-shell.
En bref, vous aurez probablement besoin de niveaux désordonnés de sous-coquilles pour que cela fonctionne.
la source
J'ai travaillé dans des éditeurs de logiciels de production où nous venions de créer de nouveaux utilisateurs et groupes pour diverses fonctions. De nouveaux comptes d'utilisateurs spécifiquement pour la gestion de la configuration ou les versions de logiciels avec différents niveaux de visibilité dans d'autres domaines fonctionnels connexes via l'appartenance à un groupe et l'ACL, et l'historique des commandes effectué par exemple,
cmmgr
seraient enregistrés~cmmgr/.bash_history
, lebldmgr
mot associé serait enregistré~bldmgr/.bash_history
, etc. Malheureusement, pour se connecter, un utilisateur doit posséder son répertoire de connexion. Par conséquent, une zone de projet a été entièrement configurée sur un disque séparé. La propriété du créateur du fichier a montré quel domaine fonctionnel a créé les fichiers dans la zone du projet, pour lequel les éléments appropriés.bash_history
peuvent être examinés.L'approche ci-dessus, cependant, ne vous donne pas la granularité que vous désirez, cependant, elle vous donne un squelette qui, lorsqu'il est combiné avec l'appartenance à un groupe, un utilisateur peut changer de groupe avec
newgrp
lequel crée efficacement un nouveau shell et un nouvel environnement, puis en utiliser un des approches données dans les autres réponses pour modifier le~/.bash_history
fichier effectif lors du changement de chapeau pour dire, decmmgr
manière ànewgrp
pouvoir gérer ce qui~/.bash_history
est utilisé et enregistré par dossier à mesure que l'on entre et sort du nouveau groupe via lanewgrp
commande. Découvrezman newgrp
. Il y a des points de départ dans ce sens dans d'autres réponses à cette question. Ceux-ci devraient fonctionner avec le paradigme du groupe UNIX - la plupart des écrous et boulons sont gérés par les routines de démarrage et de sortie du shell, contrôlées par lenewgrp
invocation. Découvreznewgrp -l
:la source
Je présente ici deux variantes, mais applicables uniquement au Z Shell .
Variante 1
C'est ce à quoi j'ai pensé en lisant le titre de votre question. Avec cette variante, vous pouvez basculer entre deux modes d'historique avec ALT+ h: Global ou local , où ce dernier bascule automatiquement vers un historique par répertoire sur chdir . L'historique global accumule toutes les commandes émises.
Manifestation
Le script (à inclure
~/.zshrc
ou à rechercher)Variante 2
En y repensant, il semble que l'historique par répertoire soit trop fin et vous décrivez également davantage un historique par projet dans votre corps de question. J'ai donc trouvé une autre variante avec une fonction workon pour basculer entre les projets. Chaque projet a son propre fichier historique
~/.zsh_projhistory_[name]
.Manifestation
Le script (à inclure
~/.zshrc
ou à rechercher)la source
Après avoir travaillé dans un domaine pendant un certain temps.
histoire> hist1.txt puis histoire plus tard> hist2.txt
Parfois, j'utilise la date pour le nom de fichier. histoire> hist20180727.txt
De cette façon, il existe un historique de commandes récent pour chaque répertoire.
la source